2

我一直在寻找一段时间。

我对依赖注入并不陌生,并且在多个项目 MVC 等中使用过StructureMap,但我想尝试一下 Ninject,以免错过乐趣。

我正在尝试将Ninject与我正在更新的现有网络应用程序一起使用。

我在 Ninject 提供的博客和 wiki 上找不到,说实话我有点不耐烦所以可能错过了,而且 google 的前几页似乎已经过时或谈论将 MVC 与 Ninject 一起使用。

到目前为止,我有以下内容并且它有效,但我希望有人能指出一个不那么侵入性的选项,关于将 ServiceModule 调用到内核并从 Web 应用程序中注入具有所需绑定的属性。

到目前为止,我拥有的是一个 ServiceModule:

public class ServiceModule : NinjectModule
{
    public override void Load()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        Bind<IPreRegistrationService>().To<PreRegistrationService>()
            .WithConstructorArgument("connectionString",connectionString);
    }
}

然后在我的页面中我定义了一个私有变量:

private IPreRegistrationService xfemPreRegistrationService = null;

然后在页面加载事件中:

    IKernel kernel = new StandardKernel(new ServiceModule());
    xfemPreRegistrationService = kernel.Get<IPreRegistrationService>();

所以这行得通,但我想要进入我定义的所有阶段:

[Inject]
public IPreRegistrationService xfemPreRegistrationService { get; set; }

在一页上,其余的都很神奇。

干杯

4

1 回答 1

2

感谢这篇 stackoverflow 帖子,我发现了有关扩展Ninject.Web的信息

我发现的问题是您需要开始使用 Ninject.Web 而我不能,因为我已经定义了一个 PageBase 来处理证券等。

所以,我能看到的唯一方法是从项目中获取KernelContainer 类(因为 KernelContainer 被定义为内部):

然后从全局 asax OnApplicationStart 调用:

KernelContainer.Kernel = new StandardKernel(new ServiceModule());

// Request injections for the application itself.
KernelContainer.Inject(this);

然后在我的 OnInit 方法的 PageBase 中:

KernelContainer.Inject(this);

这使我能够达到我的目标,即简单地说:

[Inject]
public IPreRegistrationService xfemPreRegistrationService { get; set; }

需要的地方

于 2010-07-30T13:02:03.860 回答