【问题标题】:Simple Injector Diagnostic Warning Disposable Transient简单喷油器诊断警告一次性瞬态
【发布时间】:2017-03-04 02:03:00
【问题描述】:

我正在尝试配置简单的注射器来工作,但我似乎无法通过这个。我按照link 中有关如何解决此问题的说明进行操作,但没有成功。这是错误消息:

NotificationEntities 注册为瞬态,但实现 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 生成的,所以它应该已经实现了,对吗?

【问题讨论】:

    标签: c# dependency-injection simple-injector


    【解决方案1】:

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

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

    已经为实现 IDisposable 的组件注册了 Transient 生活方式。

    这是一个问题,因为:

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

    要解决此问题,您应该:

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

    换句话说,注册你的NotificationEntities如下:

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

    【讨论】:

    • 太棒了,做到了。感谢您对此的解释!
    • @Steven 我也做了同样的事情,但对我来说,它说 Transient 组件被注册为瞬态但实现 IDisposable 有什么想法吗?
    • @Arie:您应该使用Scoped 生活方式注册它。如果这不起作用,请在 Stack Overflow 上发布 MCVE 并使用 simple-injector 标签进行标记。每当有人发布新的 Simple Injector 问题时,我都会收到 Stack Overflow 的通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多