5

我正在尝试遵循 OWIN/Katana 上托管的 WebAPI 服务的洋葱架构。

洋葱架构

我有一个这样的解决方案结构:

  • DependencyResolution:包含 OWIN 启动类和 IoC 设置
  • WebApi:Web API 控制器
  • 基础设施:接口实现
  • 核心:接口

我希望 DependencyResolution 项目为 WebApi 项目注入依赖项。DependencyResolution 确实有一个构建任务来输出到 WebApi 项目的输出文件夹。

我正在遵循此处概述的方法,使用 Autofac 和 DotNetDoodle.Owin.Dependencies NuGet 包:

http://www.tugberkugurlu.com/archive/owin-dependencies--an-ioc-container-adapter-into-owin-pipeline

但是,在我的 Startup 类中注册服务时,对 RegisterApiControllers() 的调用将失败。DependedencyResolution 程序集将首先执行,因此它将无法获取包含 ApiContollers 的程序集(WebAPI 程序集):

public IContainer RegisterServices()
{
    ContainerBuilder builder = new ContainerBuilder();

    builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
    builder.RegisterType<MyRepo>()
           .As<IRepo>()
           .InstancePerLifetimeScope();

    return builder.Build();
}

诉诸 Assembly.Load() 是这里唯一可行的选择,还是我应该放弃保持 DependencyResolution 项目隔离的想法,而只是从 WebApi 项目中引用它(似乎比洋葱少一点)?

4

1 回答 1

1

您可以使用 Web API 程序集的名称来获取其实例:

builder.RegisterApiControllers(Assembly.Load("WebApiAssembly"));
于 2014-05-20T19:56:20.277 回答