【问题标题】:How To Implement PerGraph Lifestyle如何实现 PerGraph 生活方式
【发布时间】:2015-03-03 14:23:57
【问题描述】:

根据Simple Injector documentation,存在 Per Graph 生活方式,可用于将对象的范围限制为当前图。但是文档没有列出实现它实际需要做的事情,而且我在网上找不到任何关于如何使用它的文档。注册对象时如何定义 Per Graph 范围?

我本来以为:

container.Register<ISomeType, SomeType>(Lifestyle.PerGraph);

会存在,但默认情况下不存在。

【问题讨论】:

    标签: c# .net dependency-injection simple-injector object-lifetime


    【解决方案1】:

    文档说明:

    可以使用Scoped 生活方式之一来模拟这种生活方式。

    换句话说,Simple Injector 不包含开箱即用的 PerGraph 生活方式(文档对此并没有明确说明,因此可能需要对其进行一些改进)。诀窍是选择适当的范围生活方式(取决于您的要求)并(隐式或显式)启动范围并解析图表。例如:

    var scopedLifestyle = new AsyncScopedLifestyle();
    
    container.Register<ISomeType, SomeType>(scopedLifestyle);
    
    using (AsyncScopedLifestyle.BeginScope(container))
    {
        var some = container.GetInstance<SomeRootObjectDependingOnSomeType>();
        some.Execute();
    }
    

    按图生活方式在 Simple Injector 中不存在的主要原因是因为它可能非常不可靠。如果构建图的一部分被延迟(例如,因为使用了 Lazy、Func 或对容器的回调),这将导致一个新的图,因此一个新的 per图 实例。这很容易被忽略,Simple Injector diagnostic services 不可能对此发出警告。因此,自己显式定义范围会更安全、更清晰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      相关资源
      最近更新 更多