如何使用Autofac创建相互依赖的组件
本文关键字:依赖 组件 何使用 Autofac 创建 | 更新日期: 2023-09-27 18:11:34
我有两个相互依赖的类,我希望autofacc实例化它们。基本上,父节点需要一个对子节点的引用,而子节点需要一个对服务的引用,在这种情况下,父节点恰好实现了这个服务。
public class Parent : ISomeService
{
private IChild m_child;
public Parent(IChild child)
{
m_child = child; // problem: need to pass "this" to child constructor
}
}
public class Child : IChild
{
public Child(ISomeService someService)
{
// ...store and/or use the service...
}
}
任何想法?
我发现了一个使用参数化实例化的相当优雅的解决方案。它允许使用现有对象(Parent
实例)来解决子进程对ISomeService
的依赖,而不会引入任何混乱的生命周期问题(据我所知):
public class Parent : ISomeService
{
private IChild m_child;
public Parent(Func<ISomeService, IChild> childFactory)
{
m_child = childFactory(this);
}
}
public class Child : IChild
{
public Child(ISomeService someService)
{
// ...store and/or use the service...
}
}
// Registration looks like this:
builder.RegisterType<Parent>(); // registered as self, NOT as ISomeService
builder.RegisterType<Child>().AsImplementedInterfaces();
很有魅力。:)