5

Tôi đang cố gắng theo một Kiến trúc Onion cho một dịch vụ WebAPI được lưu trữ trên OWIN/Katana.Có thể triển khai Kiến trúc Hành động và DI với WebAPI trên OWIN không?

Onion Architecture

Tôi có một cấu trúc giải pháp như thế này:

  • DependencyResolution: chứa OWIN Startup lớp và thiết lập IoC
  • WebAPI: Bộ điều khiển API Web
  • Cơ sở hạ tầng: Giao diện Triển khai
  • Lõi: Giao diện

Tôi muốn dự án DependencyResolution đưa các phụ thuộc vào dự án WebApi. DependencyResolution có một nhiệm vụ xây dựng để xuất ra thư mục đầu ra của dự án WebApi.

tôi sau phương pháp này được nêu ở đây, sử dụng Autofac và gói DotNetDoodle.Owin.Dependencies NuGet:

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

Tuy nhiên, trong việc đăng ký các dịch vụ trong lớp Startup của tôi, các cuộc gọi đến RegisterApiControllers () sẽ thất bại. Việc lắp ráp DepenedencyResolution sẽ là người đầu tiên để thực hiện vì vậy nó sẽ không có khả năng để có được lắp ráp chứa ApiContollers (WebAPI lắp ráp):

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

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

    return builder.Build(); 
} 

là phải dùng đến Assembly.Load() các lựa chọn khả thi duy nhất ở đây, hoặc Tôi có nên từ bỏ ý tưởng giữ cho dự án DependencyResolution bị cô lập và chỉ đề cập đến nó từ dự án WebApi (có vẻ ít hơn một chút hành tây)?

Trả lời

1

Bạn có thể sử dụng tên của assembly Web API để có được cá thể của nó:

builder.RegisterApiControllers(Assembly.Load("WebApiAssembly")); 
Các vấn đề liên quan