0

我有一个使用 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>();
    }
4

2 回答 2

1

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

Bind<IHttpModule>().To<MyHttpModule>();
于 2012-04-12T15:07:45.173 回答
0

看起来这混淆了 DI 容器和 Web 应用程序之间的界限。

您可能需要一个类来检索商店。然后这个类可以决定从哪里实际检索存储。它还包含初始化例程,可以在启动时调用。

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

于 2012-04-16T13:49:39.250 回答