如何在ASP.NET MVC应用程序中为非MVC对象使用Ninject

时间:2012-04-12 03:06:54

标签: ninject ninject.web.mvc

我有一个使用Ninject(NuGet安装)的ASP.NET MVC 3项目。我试图理解如何使用它将依赖项注入非MVC对象。

我有一些看起来类似于下面的代码。如何使用Ninject在下面的对象中获取IStore的具体实例?

public class SomeObject
{
    private static IStore _store;

    public static IStore CurrentStore
    {
        get 
        {
            if (_store == null)
            {
                // Get Instance of _store.
            }
            return _store; 
        }
    }
}

在Global.asax中:

protected Application_BeginRequest()
{
    IStore store = SomeObject.CurrentStore;
} 

在NinjectWebCommon.cs中:

    private static void RegisterServices(IKernel kernel)
    {
        // Module that binds a concrete type of IStore.
        kernel.Load<WebModule>();
    }

2 个答案:

答案 0 :(得分:1)

对于请求处理,最简单的方法不是在global.asax中,而是在IHttpModule中。在那里,如果为HttpModule添加绑定,则可以将依赖项作为构造函数参数:

Bind<IHttpModule>().To<MyHttpModule>();

答案 1 :(得分:0)

看起来这混淆了DI容器和放大器之间的界限。网络应用。

您可能需要的是一个检索商店的类。然后,该类可以决定从哪里实际检索商店。它还有一个初始化例程,可以在启动时调用。

这样,您的Ninject模块不会在其中获取Web应用程序代码,您可以根据上下文配置商店的加载方式(例如,测试可能与生产不同)。