5

Ich versuche, eine Onion-Architektur für eine WebAPI-Dienste auf OWIN/Katana zu folgen.Ist es möglich, Onion Architecture und DI mit WebAPI auf OWIN zu implementieren?

Onion Architecture

Ich habe eine Lösung Struktur wie folgt aus:

  • DependencyResolution: enthält OWIN Startup-Klasse und IoC Setup
  • WebAPI: Web-API-Controller
  • Infrastruktur: Schnittstellenimplementierungen
  • Kern: Schnittstellen

Ich möchte, dass das DependencyResolution-Projekt die Abhängigkeiten für das WebApi-Projekt einfügt. Die DependencyResolution verfügt über eine Build-Aufgabe, die im Ausgabeordner des WebApi-Projekts ausgegeben wird.

Ich bin nach dem Ansatz hier skizzierte, mit Autofac und das DotNetDoodle.Owin.Dependencies NuGet Paket:

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

jedoch in die Dienste in meiner Startup-Klasse registrieren, um den Anruf zu RegisterApiControllers () wird versagen. Die DepenedencyResolution Montage wird die erste auszuführen, so wird es nicht in der Lage sein, um die Montage zu erhalten, die ApiContollers enthält (WebAPI Montage):

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

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

    return builder.Build(); 
} 

Ist zu Assembly.Load zurückgreifen() die einzig gangbare Option hier, oder sollte ich einfach auf die Idee verzichten, das DependencyResolution-Projekt isoliert zu halten und einfach vom WebApi-Projekt darauf zu verweisen (scheint ein bisschen weniger als zwiebelig zu sein)?

Antwort

1

Sie können den Namen der Web-API-Assembly verwenden, um seine Instanz zu erhalten:

builder.RegisterApiControllers(Assembly.Load("WebApiAssembly")); 
Verwandte Themen