小编Dou*_*ley的帖子

Autofac报告不存在的循环依赖项

我最近将Autofac添加到一个大型的现有应用程序来管理DI.

在这个过程中,我用一个由容器管理的单个实例替换了单例,这个实例被注入到依赖的构造函数中.但是,在某些情况下,必须打破循环依赖关系.我发现这样做的最简单方法是利用OnActivated事件.我们打算修改这些类型以消除循环依赖关系,但现在更改它们的风险太大了.

对于循环依赖关系中涉及的类型,我添加了一个名为ResolveCircularDependencies的方法(这很明显,这个方法只是暂时使用,目的是解决这些循环).在OnActivated事件中调用此方法.

所以我的代码现在看起来像这样:

public class ServiceA
{
    private ServiceB otherService;

    public ServiceA()
    {
        ...
    }

    public void ResolveCircularDependencies(ServiceB other)
    {
        this.otherService = other;
    }

    public void SomeMethod()
    {
        ...
        this.otherService.SomeMethod();
        ...
    }
}

public class ServiceB
{
    private ServiceA otherService;

    public ServiceB()
    {
        ...
    }

    public void ResolveCircularDependencies(ServiceA other)
    {
        this.otherService = other;
    }

    public void SomeMethod()
    {
        ...
        this.otherService.SomeMethod();
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这些类型在Autofac模块中注册,Load方法如下:

public override void Load(ContainerBuilder builder)
{
    builder …
Run Code Online (Sandbox Code Playgroud)

autofac

4
推荐指数
1
解决办法
1506
查看次数

标签 统计

autofac ×1