Tôi đang cố gắng để có được vào ASP.NET MVC 6 công cụ mới, nhưng tôi đang có một thời gian rất khó khăn với hệ thống DI mới của họ. Tôi đã cố gắng tìm tài nguyên trực tuyến, nhưng mọi thứ tôi tìm thấy chỉ bao gồm mức tối thiểu tuyệt đối tối thiểu để sử dụng tài nguyên đó.Dịch Ninject sang ASP.NET MVC 6 DI
trước đây tôi đã sử dụng Ninject
, và tôi có một vài dây-up mà làm việc như thế này:
Bind<IDocumentStore>()
.ToMethod(c => CreateDocumentStore())
.InSingletonScope();
private static IDocumentStore CreateDocumentStore() {
// lots of initialization code, etc.
return documentStore;
}
Nhưng cho đến nay tôi đang có một thời gian khó khăn tìm hiểu làm thế nào để dịch loại hành vi để mới của Microsoft Hệ thống DI. Tất cả tôi có thể tìm thấy những ví dụ như thế này:
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
và:
services.AddMvc();
đâu tất cả mọi thứ dường như làm việc hoàn toàn vào các nhà xây dựng mặc định cho dịch vụ đích. Có cách nào để tạo ra hành vi tôi cần trong hệ thống DI mới này không?
Tôi đã nhìn thấy các
services.Configure<TOptions>(options => {});
Nhưng tôi không thực sự rõ ràng về việc liệu rằng sẽ làm những gì tôi đang suy nghĩ, hoặc nếu nó được dành riêng cho những hành vi cụ thể.
Tại sao bạn đang cố di chuyển từ Ninject sang hệ thống DI mới? Hệ thống DI mới này chỉ hỗ trợ một tập con của những hỗ trợ Ninject (và các bộ chứa khác) và hệ thống DI tích hợp sẽ không sử dụng được cho bất kỳ ứng dụng SOLID có kích thước hợp lý nào (https://stackoverflow.com/questions/30681477/dependency- tiêm-in-the-asp-net-5-vnext/30682214 # 30682214). – Steven
Tôi không nghi ngờ rằng bạn nói đúng, nhưng thành thật mà nói, hầu hết bài đăng của bạn đều nằm trên đầu tôi. Tôi về cơ bản chỉ cần tiêm constructor, và MAYBE bất động sản tiêm một lần. Nhưng tôi sẽ cố gắng nghiên cứu nó nhiều hơn một chút – Ciel
Vâng, thành thật mà nói, tôi không nghĩ rằng tôi đã từng sử dụng tính năng tiêm tài sản; Tôi chỉ sử dụng tiêm constructor. Nhưng một khi bạn bắt đầu thêm các mối quan tâm xuyên suốt như đăng nhập, kiểm tra dấu vết, kiểm tra quyền, xác thực, quản lý giao dịch, v.v., bạn sẽ hài lòng nếu bạn có [kiến trúc] (https://bit.ly/1vouSrm)) cho phép bạn thêm các mối quan tâm xuyên suốt một cách đơn giản và thanh lịch bằng cách sử dụng [decorator] (https://en.wikipedia.org/wiki/Decorator_pattern). Nó chỉ đơn giản là không thể áp dụng trang trí với container vNext như bạn có thể làm với một trong các thùng chứa trưởng thành. – Steven