我们的应用程序使用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();
这当然是#34;死代码&#34;除此以外。这是一个好的或聪明的&#34;这样做的想法,还是有更好的,更惯用的?我是否因为打扰这个问题而愚蠢?
答案 0 :(得分:3)
我认为你所做的实际上非常聪明。我采用的方法是类似的,但我没有创建一个新类型,而是指向一个现有的类型(就像你做的那样),但它的名称完全是如此,如下所示:
typeof(global::Company.Product.BusinessLayer.ICommandHandler<>).Assembly
这清楚地表明我们在这里定位业务层,如果有问题的类型被移动到另一个项目,那么这里会出现编译错误。