【问题标题】:Interfaces, business logic and global.asax with Autofac使用 Autofac 的接口、业务逻辑和 global.asax
【发布时间】:2013-07-05 15:06:32
【问题描述】:

我试图弄清楚分离应该如何与 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。应该是这样吗?

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

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

感谢您的宝贵时间!

【问题讨论】:

标签: c# asp.net .net autofac n-tier-architecture


【解决方案1】:

我的正常做法是:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 2013-04-26
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2012-01-13
    相关资源
    最近更新 更多