Ninject mvc InRequestScope

时间:2013-03-28 12:08:29

标签: asp.net-mvc ninject.web.mvc

我使用NuGet的ninject和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)。应用程序运行良好......但似乎从未处理过存储库(以及相关的上下文)(VIPRepository的dispose方法中的断点)

我也通过删除NinjectWebCommon.cs来清除app_start,因为我认为我已经正确设置了Ninject ....似乎没有。

我做错了什么?

提前致谢

1 个答案:

答案 0 :(得分:0)

我建议你看看这个优秀的&amp;关于MVC 3/4的Ninject nuget包的简单帖子:Implementing Dependency Injection in Asp.NET MVC 4 using NInject DI Container

使用nuget包,设置似乎很容易,可以在30秒内完成。