如何使用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...
    }
}

任何想法?

如何使用Autofac创建相互依赖的组件

我发现了一个使用参数化实例化的相当优雅的解决方案。它允许使用现有对象(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();

很有魅力。:)