【发布时间】:2017-05-12 04:21:48
【问题描述】:
我正在尝试使用 Simple Injector 创建一个 .net 核心 WebApi 服务。在我的 Startup.cs 我有这个:
public Startup(IHostingEnvironment env)
{
// Setup configuration stuff
container = new Container();
container.Options.DefaultScopedLifestyle = new AspNetRequestLifestyle(); // This is as specified in the docs.
}
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddOptions();
services.AddSingleton<IControllerActivator>(
new SimpleInjectorControllerActivator(this.container));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseSimpleInjectorAspNetRequestScoping(this.container);
InitializeContainer(app); // This registers stuff
this.container.Verify(); // This blows up.
app.UseMvc();
}
private void InitializeContainer(IApplicationBuilder app)
{
// Add application presentation components:
this.container.RegisterMvcControllers(app);
this.container.RegisterSingleton(new Log4NetAdapter(LogManager.GetLogger("Services.Api").Logger));
// Register other stuff here.
}
这编译得很好。但是当我尝试启动服务时,我在container.Verify() 步骤中收到以下错误消息:
{"配置无效。报告了以下诊断警告: -[Disposable Transient Component] MessageController 注册为瞬态,但实现了 IDisposable。 有关警告的详细信息,请参阅错误属性。请参阅https://simpleinjector.org/diagnostics 如何解决问题以及如何抑制个别警告。"}
-[Disposable Transient Component] MessageController 注册为transient,但实现了IDisposable。 配置无效。报告了以下诊断警告: 有关警告的详细信息,请参阅错误属性。请参阅https://simpleinjector.org/diagnostics 如何解决问题以及如何抑制个别警告。
我尝试包含必要的 nuget 包以使用 WebApiRequestLifestyle,但它
似乎只对标准的.Net项目有效;不是 .net 核心。
我在文档中找到了this page。我可以通过忽略针对我的特定控制器的警告来运行服务:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseSimpleInjectorAspNetRequestScoping(this.container);
InitializeContainer(app); // This registers stuff
var registration = container.GetRegistration(typeof(MessageController)).Registration;
registration.SuppressDiagnosticWarning(DiagnosticType.DisposableTransientComponent, "This is a Web API controller. Disposal should be handled by the system.");
this.container.Verify(); // Now this works
app.UseMvc();
}
问题在于,现在我必须进入并禁止对每个额外的控制器发出警告。这不应该由默认生活方式来处理吗?
【问题讨论】:
-
您使用的是哪个版本的 SI 和集成包?
标签: .net simple-injector asp.net-core-webapi