我们的应用程序使用 Autofac 作为 IoC 容器,并利用自动注册功能为一些包含广泛使用的代码的程序集。
要引用每个程序集,通常会使用 Assembly.GetAssembly(typeof(<type>))
,使用相应程序集中的一种类型。然而,这并不是很清楚,因为很难看出每个类型注册了哪个程序集,并且在项目之间移动类型时也可能导致错误。
为了解决这个问题,在每个有问题的程序集中,我创建了一个名为 Types
的空类那当然有程序集的命名空间,所以我可以像这样进行自动注册:
builder.RegisterAssemblyTypes(
Assembly.GetAssembly(typeof(Xx.Common.Types)),
Assembly.GetAssembly(typeof(Xx.Core.Types)),
Assembly.GetAssembly(typeof(Xx.Infrastructure.Types)))
.AsSelf()
.AsImplementedInterfaces();
否则这当然是“死代码”。这样做是一个好主意还是“聪明”的主意,还是有更好,更惯用的主意?我是不是傻了,连问这个都懒得问?
最佳答案
我觉得你的做法其实很聪明。我采用的方法类似,但我没有创建新类型,而是指向现有类型(就像您所做的那样),但完全符合其名称,如下所示:
typeof(global::Company.Product.BusinessLayer.ICommandHandler<>).Assembly
这很清楚我们在这里针对的是业务层,如果有问题的类型被移动到另一个项目,这里将会出现编译错误。
关于c# - 清楚地说明自动注册的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24419102/