【发布时间】:2018-10-18 01:59:01
【问题描述】:
Autofac 是否可以在每次解析另一个特定类型时自动实例化类型并为特定类型创建命名范围?
例如
builder.Register<MyType>.As<IMyType>().InstancePerLifetimeScope();
builder.RegisterAsAutoInstantiateType<IMyType, MySubType>().As<IMySubType>();
class MySubType(IMyType myType)
{
...
}
我已经尝试过使用 Owned,使用 OnActivated 并在每次解析 IMyType 时解析 IEnumerable<IMySubType>,但我想要的是为每个 IMyType 创建一个新的生命周期范围,并自动解析并实例化所有为该 IMyType 范围注册的类型。
【问题讨论】:
-
这是一件相当少见的事情(比如,在我与 Autofac 合作的这些年里,我从未听说过这样的要求)所以我很好奇是否有不同的方法解决您正在查看的问题。也就是说,您已经指定了一个涉及生命周期范围和事物的复杂创建的解决方案……但是要解决的挑战是什么?也许有一种不涉及这种复杂程度的不同方法来处理它。
-
@Travis-Illig 我试着用一句话来表述它:调用者创建类型 A 的对象(分别解析一个 Func
() 来创建 As)并且插件应该提供以下类型在创建 As 时自动实例化,它应该是通用的,这样插件不仅可以指定创建 As 时创建的类型,还可以指定其他类型。 -
最好通过更新您的问题来扩展它。听起来好像有某种插件机制......有“自动实例化的类型”但是什么拥有对它们的引用?被创建并立即失去范围?插件长什么样? (这都应该在问题中,而不是在 cmets 中......)