为单独的项目配置Autofac IoC

时间:2016-12-16 19:33:17

标签: c# autofac

我应该如何配置Autofac,以便我的控制台应用程序不必添加对接口的每个不同实现的引用?

我有以下项目结构:

App.Core - 包含将在其他类库上使用的接口的类库 App.ImplA - 实现App.Core接口的类库 App.ImplB - 实现App.Core接口的类库 App.Console - 控制台应用程序引用App.Core并使用Autofac为实现类注入正确的引用

Autofac网站上的示例建议将以下代码添加到主项目中,在我的案例中是App.Console:

var builder = new ContainerBuilder();
builder.RegisterType<SomeClass>().As<ISomeInterface>().InstancePerDependency();
var appContainer = builder.Build();

但是,如果我想通过config决定应该使用哪个实现类/程序集,我就不会引用具有实现的程序集(我错了吗?)。因此,我无法在SomeClass函数上引用RegisterType

我该怎么做?是不是?

1 个答案:

答案 0 :(得分:1)

根据您的应用和程序集的结构,我认为您基本上有两种选择。

如果所有实现同时在应用程序中 - 例如,您两者 SQL Server数据访问层的实现用于Oracle数据访问层 - 然后您就会遇到configuration。您可以通过在an Autofac module中注册多个相关类型然后使用配置来切换模块而不是单个类型来更轻松地进行一些打字。例如,所有SQL Server类型注册都将在一个模块中发生,并且所有Oracle类型注册都将在不同的模块中发生。配置将指示要运行的模块 - 单行更改而不是多行。

如果您可以将应用程序结构化为仅包含您要使用的实施,则可以使用assembly scanning进行注册。基本上,搜索实现接口的所有内容并将其全部注册。您还可以通过搜索和注册应用程序集中找到的所有模块将其与Autofac modules结合使用。