Dipendenza dall'iniezione:porta il tuo contenitore nell'API Web .NET Core, ad esempio con Simple Injector

 C Programming >> Programmazione C >  >> Tags >> API
Dipendenza dall'iniezione:porta il tuo contenitore nell'API Web .NET Core, ad esempio con Simple Injector

Introduzione all'iniettore semplice

Simple Injector è una libreria di Dependency Injection (DI) facile da usare per .NET che supporta le app .NET Core, Xamarin, Mono e Universal. Simple Injector si integra facilmente con framework come Web API, MVC, WCF, ASP.NET Core e molti altri. È facile implementare lo schema di iniezione delle dipendenze con componenti ad accoppiamento lasco utilizzando Simple Injector.

Perché semplice iniettore? È semplice da usare, gratuito, veloce, supporta tipi di generici avanzati e fornisce potenti servizi di diagnostica.

Se vuoi saperne di più puoi controllare la documentazione qui:https://simpleinjector.readthedocs.io/en/latest/quickstart.html

Installazione di Simple Injector nell'API Web ASP.NET Core

Seleziona e installa SimpleInjector.Integration.AspNetCore.Mvc da "Gestisci pacchetti Nuget" pannello

oppure digita il seguente comando in "Console di gestione pacchetti" :

Install-Package SimpleInjector.Integration.AspNetCore.Mvc -Version 4.0.12

Configurazione di Simple Injector in API Web ASP.NET Core

  • Importa SimpleInjector, SimpleInjector.Stili di vita e SimpleInjector.Integration.AspNetCore.Mvc spazi dei nomi
  • Aggiungi un Contenitore proprietà nella tua classe Startup.cs
  • Registra il tuo servizio con la sua Interfaccia appropriata , Iniettore semplice supporta l'iniezione di calcestruzzo (la classe senza la sua interfaccia), puoi impostare Lifestyle.Scoped, Lifestyle.Singleton o Lifestyle.Transient
  • Aggiungi facoltativamente Verifica metodo, (dopo RegisterMvcControllers metodo nel metodo Configure) itera il servizio registrato per verificare se qualcosa non è corretto, genererà un'eccezione prima di qualsiasi esecuzione del programma
  • Aggiungi SimpleInjectorControllerActivator che implementa IControllerActivator per fornire la risoluzione dell'inserimento delle dipendenze nel costruttore di controller
  • Quindi aggiungi il metodo di estensione UseSimpleInjectorAspNetRequestScoping che ASP.NET richiede nello ambito di Simpleinjector stile di vita

Esempio:

public interface IHelloWorldService
{
   string HelloWorld();
}
public class HelloWorldService : IHelloWorldService
{
   public string HelloWorld()
   {
      return "Hello world";
   }
}
[Route("api/[controller]")]
public class HelloController : Controller
{
   private IHelloWorldService _helloService;

   public HelloController(IHelloWorldService helloService)
   {
      _helloService = helloService;
   }

   [HttpGet]
   public string Get()
   {
      return _helloService.HelloWorld();
   }
}
public class Startup
{
   private Container container = new Container();

   public Startup(IConfiguration configuration)
   {
      Configuration = configuration;
   }

   public IConfiguration Configuration { get; }

   // This method gets called by the runtime. Use this method to add services to the container.
   public void ConfigureServices(IServiceCollection services)
   {
      services.AddMvc();

      // Default lifestyle scoped + async
      // The recommendation is to use AsyncScopedLifestyle in for applications that solely consist of a Web API(or other asynchronous technologies such as ASP.NET Core)
      container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();

      // Register services
      container.Register<IHelloWorldService, HelloWorldService>(Lifestyle.Scoped); // lifestyle can set here, sometimes you want to change the default lifestyle like singleton exeptionally

      // Register controllers DI resolution
      services.AddSingleton<IControllerActivator>(new SimpleInjectorControllerActivator(container));

      // Wrap AspNet requests into Simpleinjector's scoped lifestyle
      services.UseSimpleInjectorAspNetRequestScoping(container);

  }

   // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
   public void Configure(IApplicationBuilder app, IHostingEnvironment env)
   {
      if (env.IsDevelopment())
      {
         app.UseDeveloperExceptionPage();
      }

      app.UseMvc();

      container.RegisterMvcControllers(app);

      // Verify Simple Injector configuration
      container.Verify();
   }
}

Esecuzione:

Ce l'abbiamo fatta! abbiamo portato il nostro contenitore di iniezione di dipendenza 🙂