Come utilizzare Autofac in ASP.Net Core

L'iniezione di dipendenza facilita l'accoppiamento libero e promuove testabilità e manutenzione. ASP.Net Core fornisce il supporto integrato per l'inserimento delle dipendenze (una sorta di inversione del controllo) con un contenitore di inserimento delle dipendenze minimalista. Tuttavia, il contenitore integrato manca di molte delle funzionalità di un'iniezione di dipendenza completa o di un'inversione del contenitore di controllo.

Per ovviare a questo problema, è possibile utilizzare contenitori di terze parti in ASP.Net Core. In altre parole, puoi facilmente sostituire il contenitore integrato con un contenitore di terze parti. Autofac è un'inversione del contenitore di controllo che può essere utilizzato per risolvere le dipendenze. Questo articolo fornisce una discussione su come lavorare con Autofac in ASP.Net Core.

Crea un progetto ASP.Net Core in Visual Studio

Per prima cosa creiamo un progetto ASP.Net Core in Visual Studio. Supponendo che Visual Studio 2017 o Visual Studio 2019 sia installato nel sistema, seguire i passaggi descritti di seguito per creare un nuovo progetto ASP.Net Core in Visual Studio.

  1. Avvia l'IDE di Visual Studio.
  2. Fai clic su "Crea nuovo progetto".
  3. Nella finestra "Crea nuovo progetto", seleziona "Applicazione Web ASP.Net Core" dall'elenco dei modelli visualizzati.
  4. Fare clic su Avanti.
  5. Nella finestra "Configura il tuo nuovo progetto", specifica il nome e la posizione per il nuovo progetto.
  6. Fare clic su Crea.
  7. Nella finestra "Crea nuova applicazione Web ASP.Net Core", seleziona .Net Core come runtime e ASP.Net Core 2.2 (o successivo) dall'elenco a discesa in alto.
  8. Seleziona "Applicazione Web" come modello di progetto. 
  9. Assicurati che le caselle di controllo "Abilita supporto Docker" e "Configura per HTTPS" siano deselezionate poiché non utilizzeremo queste funzionalità qui.
  10. Assicurati che l'autenticazione sia impostata su "Nessuna autenticazione" poiché non utilizzeremo nemmeno l'autenticazione.
  11. Fare clic su Crea.

Questo creerà un nuovo progetto ASP.Net Core in Visual Studio. Useremo questo progetto nelle sezioni successive di questo articolo per lavorare con Autofac.

Installa Autofac nel tuo progetto ASP.Net Core

È facile installare Autofac: puoi installarlo da NuGet. Al momento della stesura di questo documento, la versione corrente di Autofac è la 4.9.2. Per lavorare con Autofac, è necessario installare anche il pacchetto Autofac.Extensions.DependencyInjection. Ciò garantirà di avere le dipendenze necessarie installate per lavorare con Autofac.

Seleziona il progetto di applicazione Web ASP.Net Core creato in precedenza, quindi fai clic con il pulsante destro del mouse e installa Autofac.Extensions.DependencyInjection tramite NuGet Package Manager. Accetta gli eventuali accordi di licenza che ti potrebbero essere richiesti durante l'installazione. In alternativa, è possibile installare questo pacchetto immettendo il comando seguente nella console di Gestione pacchetti NuGet:

Pacchetto di installazione Autofac.Extensions.DependencyInjection

Crea una classe nella tua applicazione ASP.Net Core

Per illustrare l'inserimento delle dipendenze, avremo bisogno di alcuni oggetti con cui lavorare. Considera l'interfaccia IAuthorRepository che contiene la dichiarazione del metodo GetMessage di seguito.

 interfaccia pubblica IAuthorRepository

    {

        string GetMessage ();

    }

La classe AuthorRepository implementa l'interfaccia IAuthorRepository come mostrato di seguito.

 classe pubblica AuthorRepository: IAuthorRepository

    {

        stringa pubblica GetMessage ()

        {

            restituire "Hello World";

        }

    }

Si noti che questa è un'implementazione minimalista di un repository, ovvero non contiene i metodi CRUD contenuti in un tipico repository. Lascerò a voi l'implementazione dei metodi CRUD in modo appropriato.

Configurare Autofac in ASP.Net Core

Per configurare Autofac, è necessario specificare il codice di configurazione nel metodo ConfigureServices della classe Startup. Si noti che il metodo ConfigureServices viene utilizzato per aggiungere servizi in fase di esecuzione al contenitore.

Il primo passo è creare un generatore di container per registrare i servizi necessari con il container Autofac. Il primo passaggio consiste nel popolare i servizi del framework utilizzando il metodo Populate come mostrato di seguito.

var containerBuilder = new ContainerBuilder ();

containerBuilder.Populate (servizi);

Il passo successivo è registrare i servizi personalizzati con Autofac. A tale scopo, utilizzare il metodo RegisterType sull'istanza del generatore di contenitori come mostrato di seguito.

containerBuilder.RegisterType (). As ();

Per creare il contenitore, scrivi il codice seguente.

var container = containerBuilder.Build ();

return container.Resolve ();

Ecco il codice sorgente completo del metodo ConfigureServices come riferimento:

public IServiceProvider ConfigureServices (servizi IServiceCollection)

   {

       services.AddMvc ();

       var containerBuilder = new ContainerBuilder ();

       containerBuilder.Populate (servizi);

       containerBuilder.RegisterType ().

       Come();

       var container = containerBuilder.Build ();

       return container.Resolve ();

   }

Usa Autofac nei tuoi controller in ASP.Net Core

Ora che Autofac è stato installato e configurato nel tuo progetto, puoi iniziare a usarlo nei tuoi controller. Il frammento di codice seguente illustra come risolvere le dipendenze in ValuesController.

  public class ValuesController: ControllerBase

  {

        private IAuthorRepository _authorRepository; 

        public ValuesController (IAuthorRepository authorRepository) 

        {

            _authorRepository = authorRepository;

        } // GET api / values

        [HttpGet]

        pubblico ActionResult Get ()

        {

            return _authorRepository.GetMessage ();

        }

     // Altri metodi di azione

  }

Il principio di iniezione di dipendenza è una realizzazione del principio di inversione del controllo. È una tecnica utilizzata per rimuovere le dipendenze dall'implementazione consentendo di iniettare queste dipendenze esternamente. L'inversione dei contenitori di controllo come Autofac sfrutta l'inserimento delle dipendenze per invertire il flusso di controllo e aiutare ad automatizzare la creazione di istanze e la gestione del ciclo di vita degli oggetti.

L'inserimento delle dipendenze assume tre forme: inserimento nel costruttore, inserimento nell'interfaccia e inserimento nella proprietà. In questo esempio, abbiamo utilizzato l'iniezione del costruttore per iniettare una dipendenza, ovvero un'istanza di tipo AuthorRepository, in fase di esecuzione nella classe ValuesController.

Abbiamo visto come Autofac può essere utilizzato per sostituire il contenitore di inserimento delle dipendenze predefinito in ASP.Net Core, ma abbiamo solo scalfito la superficie delle sue capacità. Esplorerò Autofac in modo più approfondito nei prossimi post qui.