我在浏览了webapi2
应用程序中的文档后实现了AutoFac。在项目的不同组装中有服务。为了解决依赖关系,我尝试了以下三种独立工作的方法。虽然它有效但我觉得每个都有自己的用法来实现。每个人如何处理我的依赖关系以及使用它的位置?
builder.RegisterType<TestManager>().AsImplementedInterfaces();//first way
builder.RegisterAssemblyTypes(typeof(TestManager).Assembly).AsImplementedInterfaces();//second way
builder.RegisterType<TestManager>().As<ITestManager>();//third way
答案 0 :(得分:1)
这三种方式中的每一种都有其优点和缺点。没有人更好或更糟,这取决于您将要应用它们的具体方案。
第一种方式:显式注册类型,带有隐式接口。
builder.RegisterType<TestManager>().AsImplementedInterfaces();//first way
优点:
缺点:
第二种方式:注册程序集中的所有类型,而无需专门枚举类型或接口。
builder.RegisterAssemblyTypes(typeof(TestManager).Assembly)
.AsImplementedInterfaces();//second way
优点:
缺点:
第三种方式:使用显式接口显式注册类型。
builder.RegisterType<TestManager>().As<ITestManager>();//third way
优点:
缺点:
我列举的确有更多优点/缺点。这些是我想到的。我认为它们可以成为你的一个很好的起点。您将在实际场景中使用它们来了解您喜欢哪一个。
您可能会使用这三种方式的某种组合。一种常见的方法是在简单场景中使用(2),并为需要更复杂注册的类型添加(1)或(3)的特定注册。如果您的注册需求不是那么简单,或者您的应用程序非常大,我不建议使用(2),因为很难知道您真正注册的是什么。 请记住,注册的顺序很重要。他们是累积的,最后一个赢了。因此,如果你打算使用(2)结合(1)或(3)你应该先做(2)然后做其他的(否则特定的注册将被普通的注册覆盖)。