将 Ninject 翻译成 ASP.NET MVC 6 DI
Translating Ninject to ASP.NET MVC 6 DI
我正在尝试使用新的 ASP.NET MVC 6 东西,但我很难使用他们的新 DI 系统。我试图在网上查找资源,但我找到的所有内容都只涵盖了使用它的绝对最低限度。
我之前使用的是 Ninject
,我有几个这样的线路:
Bind<IDocumentStore>()
.ToMethod(c => CreateDocumentStore())
.InSingletonScope();
private static IDocumentStore CreateDocumentStore() {
// lots of initialization code, etc.
return documentStore;
}
但到目前为止,我很难找到如何将这种行为转换为 Microsoft 的新 DI 系统。我能找到的都是这样的例子:
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
和:
services.AddMvc();
一切似乎都完全在目标服务的默认构造函数上运行。有什么方法可以在这个新的 DI 系统中产生我需要的行为吗?
我看过
services.Configure<TOptions>(options => {});
但我不太清楚这是否会按照我的想法进行,或者它是否保留用于特定行为。
AddTransient
方法有多种重载,其中之一接受 lambda 表达式:
services.AddTransient<IDocumentStore>(s => CreateDocumentStore());
不过您似乎使用了 Ninject InSingletonScope()
修饰符,所以这可能更合适:
services.AddSingleton<IEmailSender>(s => CreateDocumentStore());
补充说明:有一些 pre-release documentation 可用(当然,它不完整,可能不正确但可能有帮助)
您也可以通过将 Microsoft.Framework.DependencyInjection.Ninject 添加到您的项目并使用以下代码对其进行配置来继续使用 Ninject:
public IServiceProvider ConfigureServices(Microsoft.Framework.DependencyInjection.IServiceCollection services)
{
var kernel = CreateMyKernel();
kernel.Populate(services); // Wire up configured services and Ninject kernel with Microsoft tool
return kernel.Get<IServiceProvider>();
}
我正在尝试使用新的 ASP.NET MVC 6 东西,但我很难使用他们的新 DI 系统。我试图在网上查找资源,但我找到的所有内容都只涵盖了使用它的绝对最低限度。
我之前使用的是 Ninject
,我有几个这样的线路:
Bind<IDocumentStore>()
.ToMethod(c => CreateDocumentStore())
.InSingletonScope();
private static IDocumentStore CreateDocumentStore() {
// lots of initialization code, etc.
return documentStore;
}
但到目前为止,我很难找到如何将这种行为转换为 Microsoft 的新 DI 系统。我能找到的都是这样的例子:
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
和:
services.AddMvc();
一切似乎都完全在目标服务的默认构造函数上运行。有什么方法可以在这个新的 DI 系统中产生我需要的行为吗?
我看过
services.Configure<TOptions>(options => {});
但我不太清楚这是否会按照我的想法进行,或者它是否保留用于特定行为。
AddTransient
方法有多种重载,其中之一接受 lambda 表达式:
services.AddTransient<IDocumentStore>(s => CreateDocumentStore());
不过您似乎使用了 Ninject InSingletonScope()
修饰符,所以这可能更合适:
services.AddSingleton<IEmailSender>(s => CreateDocumentStore());
补充说明:有一些 pre-release documentation 可用(当然,它不完整,可能不正确但可能有帮助)
您也可以通过将 Microsoft.Framework.DependencyInjection.Ninject 添加到您的项目并使用以下代码对其进行配置来继续使用 Ninject:
public IServiceProvider ConfigureServices(Microsoft.Framework.DependencyInjection.IServiceCollection services)
{
var kernel = CreateMyKernel();
kernel.Populate(services); // Wire up configured services and Ninject kernel with Microsoft tool
return kernel.Get<IServiceProvider>();
}