我有点新的autofac,但已经有不同的“简单”的配置中使用它成功。 现在我想要的东西更复杂,斗争与合作了这一点。
从本质上讲,我有一个入口点,所有autofac配置完成和第一对象都解决了,这本身通过构造函数注入得到的依赖关系,它们的相关性可以有其他的依赖等。
一些代码:
public class Root
{
public Root(A.Factory factory)
{
for (int i = 0; i < 3;i++)
{
A obj = factory();
// do something here
}
}
}
public class A
{
public delegate A Factory();
public A(B b, C c)
{
}
}
public class B
{
public B(C c)
{
}
}
public class C
{
}
我要的是:根类是只有一次解决。 A级应该解决的一个新实例每次。 对于每一个A和其子,B和C的情况下,应被共享。 即:“内部”每个A,只有一个每个B和C的情况下也是每个一个有它的B和C的自己的实例
我想我可能会与国有做到这一点(还没有尝试过)。 无论如何,我想保持所有autofac特定的代码我的业务类的,所以我想也许有一种方法来告诉它应该创建一个新的范围内的每一个A解决时间登记。
这可能与autofac? 我有奇怪的要求,或做我的思想走错路? 这甚至可能与autofac旁边其他DI框架?
最好的祝福,
KC
更新2018年8月7日:
也许我不是什么我的想法很清楚。 我试图让我想要实现结构的图片:
每个字母代表了对应的级的解决实例。 箭头显示当这些情况下,应注射。 因此,大家可以看到,每次我的根实例解决的一个实例,创建B和C的新实例。 然而,C的同一实例应注入的那些新的A和B的实例。 这不应该被限制到只有两班无论如何,所以手动接线应保持在最低限度。
你能想象一个作为一种范围发电机为后面的道路全部依赖。
在此期间,我发现Ninject有命名范围(Ninject.Extensions.NamedScope),允许这样的事情的扩展。 该配置将在某种程度上是这样的:
Bind<A>.ToSelf().DefinesNamedScope("ScopeA");
Bind<B>.ToSelf().InNamedScope("ScopeA");
Bind<C>.ToSelf().InNamedScope("ScopeA");
有没有这样的事情在autofac?