Autofac触发lifetimescope创建

时间:2016-02-27 20:44:29

标签: c# dependency-injection inversion-of-control autofac

解析组件时是否有任何方法可以创建新的lifetimescope

含义如

  

container.registerType(),作为()。TriggersNewScope()

还有其他办法吗?除了依赖ILifetimeScope并直接解决它?

如果没有,是否有办法抽象ILifetimeScope?我不希望应用程序的这一部分引用Autofac ..

由于

2 个答案:

答案 0 :(得分:1)

实际上没有“组件触发生命周期范围创建”的事情。但是,您可能对Owned<T>感兴趣。这导致组件在其自己的小生命周期内得到解决。

答案 1 :(得分:1)

您需要将重复使用的服务注册为InstancePerOwned

剩下的未解决的部分是避免引用Autofac,这是一个可能的解决方法:

  • 在Autofac不可知组件中定义您的IOwned接口。
  • 在Autofac感知组合root中定义并注册开放式通用CustomOwned实现:

    class CustomOwned<T> : IOwned<T>, IDisposable
    {
        public T Value { get { return _owned.Value; } }
        public CustomOwned(Autofac.Owned<T> owned)
        {
            _owned = owned;
        }
    
       // IDisposable implementation and whatever additional stuff
    }  
    
  • 在您的类型中使用IOwned而非Owned。