5

Jest możliwe zarejestrowanie zależności ręcznie:Konwencja opiera się wiążąca w ASP.NET 5/MVC 6

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

Gdy istnieje zbyt wiele zależności, trudne staje się zarejestrować wszystkie zależności ręcznie.

Jaki jest najlepszy sposób wdrożenia powiązania opartego na konwencjach w MVC 6 (wersja beta 7)?

P.S. W poprzednich projektach używałem Ninject z ninject.extensions.conventions. Ale nie mogę znaleźć adaptera Ninject dla MVC 6.

+1

Autofac, który ma skanowanie montażową obsługuje MVC6 się; to dobrze działa. –

Odpowiedz

0

Jeśli nadal jest interesujący dla kogoś. To jest moje rozwiązanie problemu z Autofac. Wymagane są pakiety NuGet: Autofac i Autofac.Extensions.DependencyInjection.

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

to moduł konwencję

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

Nie, nie ma obsługi rejestracji partii w wbudowanej bibliotece DI ASP.NET 5. W rzeczywistości istnieje many features that are needed to build large SOLID applications, but are not included we wbudowanej bibliotece DI.

Dołączona biblioteka ASP.NET DI służy przede wszystkim do rozszerzenia samego systemu ASP.NET. Dla twojej aplikacji najlepiej jest użyć jednej z dojrzałych bibliotek DI tam, i keep your configuration separate z konfiguracji, która była używana do konfiguracji samego systemu ASP.NET. Dzięki temu nie trzeba używać adaptera.

2

Adapter MVC 6 istnieje, ale widząc, że ASP.net 5 nadal znajduje się w wersji Release candidate, nie jest jeszcze dostępny w NuGet, więc musisz dodać główny strumień gałęzi ASP.NET 5 z MyGet do źródeł pakietu Visual Studio NuGet.

instruktażu to zrobić dostępna jest tutaj:

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

Powiązane problemy