2016-11-07 3 views
-1

Ich habe NInject seit einiger Zeit verwendet, und jetzt werde ich ein Projekt in Asp.net Core starten. Scheint NInject cannot be used with Asp.net Core. So, jetzt ist meine Frage ist Asp.net Kern bieten keine di modules just as NInject oder andere Di-Container bieten?DI Module in ASP.NET Core integrierte DI-System

+1

Sie fehlinterpretierten [this] (https://stackoverflow.com/questions/32788637/continued-ninject-support-in-asp-net-mvc-6/32797105#32797105) beantworten. Die Antwort besagt eindeutig, dass Ninject * verwendet werden kann. – Steven

Antwort

-2

Asp.Net Core bietet ein DI-Framework, das es ermöglicht, ein Objekt für jede Auflösungsanforderung per HTTP-Anforderung oder Singleton hinzuzufügen. All dies wird in der ConfigureServices Methode ex getan:

public void ConfigureServices(IServiceCollection services) 
{ 
    //Your configuration 

    // Add application services. 
    services.AddTransient<IEmailSender, AuthMessageSender>(); 
    services.AddTransient<ISmsSender, AuthMessageSender>(); 
} 

können Sie mehr lesen über sie hier

https://docs.asp.net/en/latest/fundamentals/dependency-injection.html

+1

Es beantwortet nicht wirklich die OPs Frage, ob es eine Modulunterstützung gibt, wo die Module in jeder Klassenbibliothek definiert sind und es Registrierungen dort gibt und die Hauptanwendung nur die Modulklasse während des Bootstrappings lädt – Tseng

+0

Wie kommt es das nicht beantwortet Frage? Die Frage ist über asp.net Core Support für eine DI, und die Antwort ist, es hat eine fertige, so was wäre die Antwort von Ihrem POV? und warum sollten wir einen anderen DI wie Ninject vorschlagen, wenn es schon OOB ist? –

+1

Nein, die Frage bezieht sich nicht auf ASP.NET Core Support für DI, das OP weiß, dass es da ist. Er fragte speziell nach Modulen. Module sind in der Bibliothek platzierte Klassen, die Registrierungen durchführen, im Gegensatz zu den Registrierungen in der Mail-Anwendung. Sie können hier https://github.com/ninject/Ninject/wiki/Modules-and-the-Kernel über die Module in Ninject nachlesen. Andere IoC haben es auch (CastleWindsor, Autofac, Unity Container). Aber das DI von ASP.NET Core hat das nicht aus den Gründen, auf die ich in meiner Antwort hingewiesen habe – Tseng

0

ASP.NET Kern keine Modulträger überhaupt nicht zur Verfügung stellen. Es ist ein einfacher Out-of-the-Box-Container, in den IoC-Container von Drittanbietern eingesteckt werden können.

So gibt es keine automatische Registrierung, Assembly Scannings, Dekoratoren, Interzeptoren oder Module. Wenn Sie möchten, müssen Sie Frameworks von Drittanbietern (AutoFac, StructureMap usw.) verwenden.

3rd-Party-Bibliotheken registrieren mit Registrierungsmethoden, die wie services.AddXxx() in ConfigureServices Methode aufgerufen werden.

public static class MyLibraryServiceCollectionExtensions 
{ 
    public static IServiceCollection AddMyLibrary(this IServiceCollection services) 
    { 
     services.TryAddScoped<IMyService,MyService>(); 

     return services; 
    } 
} 

Es ist bevorzugte Art und Weise Bibliotheken zu registrieren (weil es auf jedem IoC-Container hängt nicht außer für den eingebauten in IServiceCollection, die auch 3rd-Party-Container verwenden, wenn in ASP.NET-Core angeschlossen) für Sachen, wie "Business-Logik-Bibliothek" gibt es nicht wirklich so etwas (wo Module waren zuvor nützlich).

1

Um nur zu den anderen guten Antworten hinzuzufügen, können Sie z. SimpleInjector. Es ist ein brillanter DI-Container, der .Net Core (und auch ASP.Net Core) unterstützt. Weitere Informationen zur Verwendung mit .Net Core here.

Verwandte Themen