Tôi mới đến khái niệm DI và mới về structuremap. Tôi đang cố gắng điền đầy đủ một kịch bản mà tất cả các giao diện của tôi nằm trong AssemblyA
và tất cả các triển khai của tôi đều nằm trong AssemblyB
. Tôi muốn sử dụng StructureMap để tiêm dụ của AssemblyB
lớp trong constructor trong đó có sự phụ thuộc vào giao diện từ AssemblyA
Sự phụ thuộc tiêm từ nhiều hội đồng sử dụng Structuremap
public class Customer(ICustomerService)
{
}
ICustomerService
là trong AssemblyA
và CustomerService
lớp là trong assemblyB
. Tôi muốn Structuremap để tiêm CustomerService
dụ trong constructor này. Tôi giả định rằng nếu tên của lớp giống với tên của giao diện được đặt trước và I
. Structuremap sẽ tự động nhận ra nó.
Tôi đã viết cấu hình sau.
x =>
{
x.Scan(scan =>
{
scan.Assembly("AssemblyA");
scan.Assembly("AssemblyB");
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
nhưng nó mang lại cho tôi lỗi
StructureMap Exception Code: 202
No Default Instance defined for PluginFamily AssemblyA.ICustomerService, AssemblyA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Bất kỳ trợ giúp sẽ được hữu ích. Tôi muốn sử dụng các quy ước mặc định và tránh đăng ký từng giao diện cho một lớp.
Cảm ơn.
Ok, tôi đã có thể hiểu điều gì đang xảy ra. Tôi có nhiều lớp đang triển khai Giao diện trong các hội đồng khác nhau mà tôi đang quét. Điều này tạo ra lỗi ban đầu mà tôi đã báo cáo trong câu hỏi. Mã mà tôi đăng trong câu hỏi sẽ hoạt động chính xác nếu chỉ có một lớp thỏa mãn Công ước mặc định của SM trong tất cả các hội đồng quét. Tôi xấu vì không nhận được nó trước đó nhưng hy vọng nó sẽ giúp bất cứ ai đập đầu của mình. Ngay sau khi tôi thêm x.IncludeNamespace ("AssemblyA"); dòng về cơ bản tôi lọc lớp lắp ráp cho SM và nó bắt đầu làm việc :) –