5

Es ist möglich, Abhängigkeiten manuell zu registrieren:Übereinkommen aufgrund Bindung in ASP.NET 5/MVC 6

services.AddTransient<IEmailService, EmailService>(); 
services.AddTransient<ISmsService, SmsService>(); 

Wenn es zu viele Abhängigkeiten sind, wird es schwierig, manuell alle Abhängigkeiten zu registrieren.

Was ist der beste Weg, um eine Convention-basierte Bindung in MVC 6 (Beta 7) zu implementieren?

P.S. In früheren Projekten habe ich Ninject mit ninject.extensions.conventions verwendet. Aber ich kann keinen Ninject Adapter für MVC 6 finden.

+1

Autofac, was die Montage Scannen aufweist, hat heraus Unterstützung für MVC6; es läuft gut. –

Antwort

0

Wenn es für jemanden noch interessant ist. Dies ist meine Lösung des Problems mit Autofac. Es ist erforderlich, Autofac und Autofac.Extensions.DependencyInjection NuGet-Pakete.

// At Startup: 

using Autofac; 
using Autofac.Extensions.DependencyInjection; 

// ... 

public IServiceProvider ConfigureServices(IServiceCollection services) 
{ 
    // Some middleware 
    services.AddMvc(); 

    // Not-conventional "manual" bindings 
    services.AddSingleton<IMySpecificService, SuperService>(); 

    var containerBuilder = new ContainerBuilder(); 
    containerBuilder.RegisterModule(new MyConventionModule()); 
    containerBuilder.Populate(services); 
    var autofacContainer = containerBuilder.Build(); 

    return autofacContainer.Resolve<IServiceProvider>(); 
} 

Dies ist die Konvention Modul:

using Autofac; 
using System.Reflection; 
using Module = Autofac.Module; 

// ... 

public class MyConventionModule : Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     var assemblies = new [] 
     { 
      typeof(MyConventionModule).GetTypeInfo().Assembly, 
      typeof(ISomeAssemblyMarker).GetTypeInfo().Assembly, 
      typeof(ISomeOtherAssemblyMarker).GetTypeInfo().Assembly 
     }; 

     builder.RegisterAssemblyTypes(assemblies) 
      .AsImplementedInterfaces() 
      .InstancePerLifetimeScope(); 
    } 
} 
8

Nein, es gibt keine Unterstützung für Batch-Registrierung in der integrierten ASP.NET 5-DI-Bibliothek. In der integrierten DI-Bibliothek befinden sich many features that are needed to build large SOLID applications, but are not included.

Die enthaltene ASP.NET DI-Bibliothek soll in erster Linie das ASP.NET-System selbst erweitern. Für Ihre Anwendung verwenden Sie am besten eine der älteren DI-Bibliotheken und keep your configuration separate von der Konfiguration, mit der das ASP.NET-System selbst konfiguriert wurde. Dies beseitigt die Notwendigkeit für einen Adapter.

2

Ein MVC 6-Adapter existiert, aber da sich ASP.net 5 noch im Release-Kandidaten befindet, ist es in NuGet noch nicht verfügbar. Daher müssen Sie den ASP.NET 5-Zweig "Master" von MyGet hinzufügen zu Ihren Visual Studio NuGet-Paketquellen.

Ein Durchlauf zu tun, das hier verfügbar:

http://www.martinsteel.co.uk/blog/2015/using-ninject-with-mvc6/