5

Sto tentando di seguire un'architettura di Onion per un servizio WebAPI ospitato su OWIN/Katana.È possibile implementare l'architettura di cipolla e DI con WebAPI su OWIN?

Onion Architecture

Ho una struttura di soluzione come questa:

  • DependencyResolution: contiene classe OWIN avvio e la configurazione CIO
  • WebAPI: controllori API Web
  • Infrastrutture: Interfaccia Implementazioni
  • Core: Interfacce

Mi piacerebbe che il progetto DependencyResolution inserisse le dipendenze per il progetto WebApi. DependencyResolution ha un'attività di compilazione da inviare alla cartella di output del progetto WebApi.

Sto seguendo l'approccio qui delineato, utilizzando Autofac e il pacchetto DotNetDoodle.Owin.Dependencies NuGet:

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

Tuttavia, a registrare i servizi nella mia classe di avvio, la chiamata a RegisterApiControllers () avrà esito negativo. L'assemblea DepenedencyResolution sarà il primo ad eseguire in modo che non sarà in grado di ottenere l'assembly contenente le ApiContollers (assemblaggio WebAPI):

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

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

    return builder.Build(); 
} 

è ricorrere a Assembly.Load() l'unica opzione praticabile qui, o dovrei semplicemente rinunciare all'idea di mantenere isolato il progetto DependencyResolution e farvi semplicemente riferimento dal progetto WebApi (sembra un po 'meno cipolloso)?

risposta

1

È possibile utilizzare il nome del gruppo API Web per ottenere il suo esempio:

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