c# - AutoFac:PropertyWiringFlags.AllowCircularDependencies 有什么作用?

标签 c# asp.net .net-4.0 autofac

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

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)....

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

最佳答案

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

如果没有该标志,Autofac 会将组件的所有依赖项(无论属性与否)视为让任何其他组件获得对它的引用的先决条件。默认情况下,这更可靠。

关于c# - AutoFac:PropertyWiringFlags.AllowCircularDependencies 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8152465/

相关文章:

c# - HtmlGenericControl 返回 Null

c# - 将键/值匿名对象作为参数传递

c# - 如何防止 JavaScript 中的循环导致浏览器或应用程序崩溃?

c# - 在 ICommand 操作期间更新标签

c# - 打开 Excel 文件时出现异常

c# - ASP.NET - 复合控件 - 在 CreateChildControls 抑制 Button Click 事件后添加动态控件

Asp.Net 上传前检查文件大小

c# - 为什么这个 LINQ 查询没有返回正确的日期?

.net - 安装了.NET 4.5的构建服务器能否成功地将目标为4.0的项目部署到仅安装.NET 4.0的服务器上?

c# - 有没有一种简单的方法可以将(lambda 表达式)字符串解析为 Action 委托(delegate)?