0

我试图弄清楚分离应该如何与 ASP.NET 和依赖注入一起工作。

我有四个项目:

  • ASP.NET 客户端
  • BusinessLogic 类库 (BL)
  • 集成类库,调用服务引用
  • 共享(接口、模型)

在集成中,我有一个存储库,它调用其他服务。存储库“MyRepository”实现了一个接口“IMyRepository”,该接口放置在 Shared 中,并返回也放置在 Shared 中的对象。

严格来说,我不希望客户对集成项目的引用/依赖,但所有通信都应该通过 BL 进行。

在客户的 Global.asax 中,我使用 Autofac 注册我的类型

var builder = new ContainerBuilder();
builder.RegisterModule(new AutofacWebTypesModule());
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<MyRepository>().As<IMyRepository>().InstancePerHttpRequest();

但是,这需要客户端项目引用集成项目以实现 MyRepository。应该是这样吗?

我怎样才能没有客户对集成的引用并保持分离干净?

我的现实世界项目比这规模大得多,所以我试图解开依赖关系。

谢谢你的时间!

4

1 回答 1

2

我的正常做法是:

  1. 定义一种在每个单独程序集中发现类型的方法。最简单的方法(如果您不介意在每个程序集中引用 Autofac)是Module在每个程序集中放置一个 Autofac。如果您不喜欢这样,您可以定义自己的发现抽象(例如,类似 MEF 的属性)。

  2. 发现所有程序集。最简单的方法是扫描bin文件夹,但您可以使用一些自定义配置。我没有检查 Autofac 的最新版本在模块发现方面添加了什么,但之前我是手动完成的。

  3. 使用先前定义的类型发现方法从每个发现的程序集中注册所有相关类型。

于 2013-07-07T22:59:30.470 回答