5

Có thể đăng ký phụ thuộc bằng tay:ước dựa ràng buộc trong ASP.NET 5/MVC 6

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

Khi có quá nhiều phụ thuộc, nó trở nên khó khăn để đăng ký tất cả phụ thuộc bằng tay.

Cách tốt nhất để triển khai quy ước dựa trên ràng buộc trong MVC 6 (beta 7) là gì?

P.S. Trong các dự án trước, tôi đã sử dụng Ninject với ninject.extensions.conventions. Nhưng tôi không thể tìm thấy bộ điều hợp Ninject cho MVC 6.

+1

Autofac, trong đó có chức năng quét lắp ráp, đã hỗ trợ cho MVC6 ra; nó hoạt động tốt. –

Trả lời

0

Nếu nó vẫn còn hấp dẫn đối với một ai đó. Đây là giải pháp của tôi về vấn đề với Autofac. Nó được yêu cầu AutofacAutofac.Extensions.DependencyInjection gói NuGet.

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

Đây là mô-đun ước:

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

Không, không hỗ trợ đăng ký hàng loạt trong thư viện DI tích hợp sẵn trong ASP.NET 5. Trên thực tế, có many features that are needed to build large SOLID applications, but are not included trong thư viện DI được tích hợp sẵn.

Thư viện ASP.NET DI đi kèm chủ yếu có nghĩa là mở rộng hệ thống ASP.NET. Đối với ứng dụng của bạn, bạn nên sử dụng một trong các thư viện DI trưởng thành ở đó và keep your configuration separate từ cấu hình được sử dụng để định cấu hình chính hệ thống ASP.NET. Điều này sẽ loại bỏ sự cần thiết của bộ điều hợp.

2

Bộ điều hợp MVC 6 tồn tại, nhưng nhìn thấy như ASP.net 5 vẫn còn trong ứng cử viên phát hành, nó chưa có sẵn trên NuGet, do đó bạn sẽ cần thêm nguồn cấp ASP.NET 5 "master" từ MyGet vào các gói phần mềm Visual Studio NuGet của bạn.

Một hương để làm điều này là có sẵn ở đây:

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

Các vấn đề liên quan