Я использую ninject из NuGet с приложением MVC 4.
public class MvcApplication : System.Web.HttpApplication
Я знаю, что мог бы использовать класс ninject как базовый класс, но я этого не сделал.
В моем global.asax.cs я
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
где
public class NinjectControllerFactory : DefaultControllerFactory {
private IKernel _ninjectKernel;
public NinjectControllerFactory() {
_ninjectKernel = new StandardKernel();
AddBindings();
}
public T GetInstance<T>() {
return _ninjectKernel.Get<T>();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) {
return controllerType == null
? null
: (IController)_ninjectKernel.Get(controllerType);
}
private void AddBindings() {
_ninjectKernel.Bind<IVIPRepository>().To<VIPRepository>().InRequestScope().
WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["VIPFullContext"].ConnectionString);
_ninjectKernel.Bind<IPrezentationProvider>().To<HardPrezProvider.HardPrezentationProvider>().InRequestScope(); ;
}
}
В моем web.config я загружаю модуль (и проверяю, хорошо ли он загружен)
<system.webServer>
<modules>
<add name="OnePerRequestHttpModule" type="Ninject.Web.Common.OnePerRequestHttpModule"/>
</modules>
</system.webServer>
Мой контроллер происходит от BaseController(IVIPRepository repo)
. И приложение работает хорошо ... но кажется, что репозитории (и, следовательно, связанный контекст) никогда не удаляются (точка останова в методе dispose VIPRepository)
Я также очищаю app_start, удаляя NinjectWebCommon.cs
, потому что я думаю, что правильно настроил Ninject... Кажется, нет.
Что я сделал не так ?
заранее спасибо