Injektionsabhängigkeit:Bringen Sie Ihren eigenen Container in die .NET Core-Web-API, beispielsweise mit Simple Injector

 C Programming >> C-Programmierung >  >> Tags >> API
Injektionsabhängigkeit:Bringen Sie Ihren eigenen Container in die .NET Core-Web-API, beispielsweise mit Simple Injector

Einführung des einfachen Injektors

Simple Injector ist eine benutzerfreundliche Dependency Injection (DI)-Bibliothek für .NET, die .NET Core-, Xamarin-, Mono- und Universal-Apps unterstützt. Simple Injector lässt sich problemlos in Frameworks wie Web-API, MVC, WCF, ASP.NET Core und viele andere integrieren. Es ist einfach, das Abhängigkeitsinjektionsmuster mit lose gekoppelten Komponenten mit Simple Injector zu implementieren.

Warum einfacher Injektor? Es ist einfach zu verwenden, kostenlos, schnell, unterstützt erweiterte generische Typen und bietet leistungsstarke Diagnosedienste.

Wenn Sie mehr darüber erfahren möchten, können Sie die Dokumentation hier einsehen:https://simpleinjector.readthedocs.io/en/latest/quickstart.html

Installation von Simple Injector in ASP.NET Core WebAPI

Wählen und installieren Sie SimpleInjector.Integration.AspNetCore.Mvc aus „Nuget-Pakete verwalten“ Bedienfeld

oder geben Sie den folgenden Befehl in "Paketverwaltungskonsole" ein :

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

Konfiguration des einfachen Injektors in ASP.NET Core-WebAPI

  • Importieren Sie SimpleInjector, SimpleInjector.Lifestyles und SimpleInjector.Integration.AspNetCore.Mvc Namensräume
  • Fügen Sie einen Container hinzu -Eigenschaft in Ihrer Klasse Startup.cs
  • Registrieren Sie Ihren Dienst mit der entsprechenden Schnittstelle , Einfacher Injektor Betoninjektion unterstützt (die Klasse ohne ihre Schnittstelle), können Sie Lifestyle.Scoped, Lifestyle.Singleton oder Lifestyle.Transient festlegen
  • Fügen Sie optional Bestätigen hinzu Methode, (nach RegisterMvcControllers Methode in der Configure-Methode) iteriert den registrierten Dienst, um zu prüfen, ob etwas nicht korrekt ist, und löst eine Ausnahme aus, bevor das Programm ausgeführt wird
  • Fügen Sie SimpleInjectorControllerActivator hinzu die IControllerActivator implementiert um die Auflösung der Abhängigkeitsinjektion im Controller-Konstruktor bereitzustellen
  • Fügen Sie dann die Erweiterungsmethode UseSimpleInjectorAspNetRequestScoping hinzu die ASP.NET in den Scoped von Simpleinjector anfordert Lebensstil

Beispiel:

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();
   }
}

Ausführung:

Wir haben es geschafft! wir haben unseren eigenen Abhängigkeitsinjektionsbehälter mitgebracht 🙂