简单的注射器诊断警告一次性瞬态

Ron*_*n T 7 c# dependency-injection simple-injector

我正在尝试配置简单的注入器工作,但我似乎无法通过这个.我按照说明如何在此链接中修复此问题,但它不起作用.这是错误消息:

NotificationEntities注册为transient,但实现了IDisposable.

这是SimpleInjectorInitializer.cs的代码

public static void Initialize()
{
    var container = new Container();
    container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();

    InitializeContainer(container);

    container.RegisterMvcControllers(Assembly.GetExecutingAssembly());

    container.Verify();

    DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
}

private static void InitializeContainer(Container container)
{
    container.Register<IEmailTemplateRepository, EmailTemplateRepository>();
}
Run Code Online (Sandbox Code Playgroud)

NotificationEntities是从EF生成的,所以它应该已经实现了,对吗?

Ste*_*ven 11

NotificationEntities是从EF生成的,所以它应该已经实现了,对吗?

是的,NotificationEntities确实实现了IDisposable,这正是警告告诉你的:

已经使用Transient生活方式注册了实现IDisposable的组件.

这是一个问题,因为:

实现的组件IDisposable通常需要确定性清理,但Simple Injector不会隐式跟踪和处理使用瞬态生活方式注册的组件.

要解决这个问题,你应该:

使用适合您正在使用的应用程序的范围生活方式注册组件.

换句话说,注册NotificationEntities如下:

container.Register<NotificationEntities>(Lifestyle.Scoped);
Run Code Online (Sandbox Code Playgroud)