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

时间:2017-03-04 02:03:01

标签: c# dependency-injection simple-injector

我正在尝试配置简单的注入器工作,但我似乎无法通过这个。我按照有关如何解决这个问题的说明进行了link,但它没有奏效。以下是错误消息:

  

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>();
}

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

1 个答案:

答案 0 :(得分:10)

  

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

是的,NotificationEntities确实实施了IDisposable,这正是警告telling你:

  

使用Transient生活方式为实现IDisposable的组件进行了注册。

这是一个问题,因为:

  

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

要解决此问题,您应该:

  

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

换句话说,请按以下方式注册NotificationEntities

container.Register<NotificationEntities>(Lifestyle.Scoped);