autofacc:什么是PropertyWiringFlags.AllowCircularDependencies做

本文关键字:AllowCircularDependencies PropertyWiringFlags 什么 autofacc | 更新日期: 2023-09-27 18:14:43

我有一部分代码的依赖关系如下:

public class MyPage : Page //ASPX WebForms page
{
    public IPersonBl PersonBl { get; set; }
}
public class PersonBl : IPersonBl
{
    public PersonBl(ISomeMagicBl magicBl){...}
}
public class SomeMagicBl : ISomeMagicBl
{
    public IPersonBl PersonBl { get; set; }
    public SomeMagicBl(/*Other dependencies*/) {...}
}

我的模块配置如下

...
builder.RegisterAssemblyTypes(ThisAssembly).Where(t => t.Name.EndsWith("BL")).AsImplementedInterfaces().PropertiesAutowired(PropertyWiringFlags.AllowCircularDependencies).InstancePerLifetimeScope();
...

可以看到,我在我的类中有循环依赖,我可以通过使用..PropertiesAutowired(PropertyWiringFlags.AllowCircularDependencies)..来解决。

我的问题:这个标志到底在幕后做什么来解决这些循环依赖?

autofacc:什么是PropertyWiringFlags.AllowCircularDependencies做

标志改变了从构造时到图的其余部分创建之后为类型完成属性注入的点。它依赖于循环中具有某种共享(单例或单请求)的一个或多个组件——即使有了标志,如果所有组件都是实例依赖的,那么某种循环仍然存在。

如果没有这个标志,Autofac认为组件的所有依赖关系,无论是否有属性,都是允许任何其他组件获得对它的引用的先决条件。

仅供参考,解决循环依赖的另一种好方法是通过对Func<T>进行依赖,只要您不访问构造函数中的函数。

相关文章:
  • 没有找到相关文章