2010-02-18 25 views
5

Tôi có một lớp SysMsgManager quy định tại dự án CoreService như sau:StructureMap ngoại lệ: No Default Instance định nghĩa cho PluginFamily

public class SysMsgManager 
{ 
    private ISysMsgRepository _SysMsgRepository; 

    public SysMsgManager() 
    { 
     _SysMsgRepository = ObjectFactory.GetInstance<ISysMsgRepository>(); 
    } 

    .... 
} 

Trong dự án DataAccess của tôi, tôi đã giao diện 'ISysMsgRepository' và hai triển khai cụ thể được xác định như sau:

namespace DataAccess.Repository 
{ 
    [Pluggable("Default")] 
    public class SysMsgRepository : ISysMsgRepository 
    { 
     ... 
    } 
} 

namespace DataAccess.Repository 
{ 
    [Pluggable("Stub")] 
    public class SysMsgRepository_Test : ISysMsgRepository 
    { 
     ... 
    } 
} 

và đây là những gì tôi có trong tập tin StructureMap.config tôi

<StructureMap> 

<Assembly Name="CoreService" /> 
<Assembly Name="DataAccess" /> 

<PluginFamily 
    Assembly="DataAccess" 
    Type="DataAccess.Repository.ISysMsgRepository" 
    DefaultKey="Default" /> 

</StructureMap> 

Khi tôi cố gắng chạy ứng dụng của tôi, tôi đã nhận lỗi sau:

StructureMap Exception Code: 202 \ nKhông Mặc định thẩm định nghĩa cho PluginFamily DataAccess.Repository.ISysMsgRepository, DataAccess, Version = 1.0.0.0, Culture = trung tính, PublicKeyToken = null

Có ai giúp tôi giải quyết vấn đề này không? Cảm ơn!

+0

Tôi biết đây không phải là giải pháp cho vấn đề cụ thể này, nhưng làm cho các lớp học chắc chắn là các bản sửa lỗi nào lỗi này cũng – Nick

Trả lời

8

Thật không may tôi có chút quen thuộc với cấu hình Sơ đồ cấu trúc thông qua Xml. Hãy để tôi chỉ cho bạn cách nó được thực hiện bằng cách sử dụng C#.

var container = new Container(config=> 
{ 
    config.For<ISysMsgRepository>().Use<SysMsgRepository>(); 
}); 

Dường như bạn đang sử dụng quy ước đặt tên chuẩn cho các giao diện và lớp học của bạn (chỉ cần gắn một mặt lên tên lớp). Nếu bạn làm điều đó cho tất cả các loại, bạn có thể chỉ định cấu hình vùng chứa của mình như sau:

var container = new Container(config=> 
{ 
    config.Scan(scan => 
    { 
     scan.TheCallingAssembly(); 
     scan.WithDefaultConventions(); 
    }); 
}); 

Tôi hy vọng điều này sẽ hữu ích. Việc định cấu hình vùng chứa của bạn dễ dàng hơn bằng mã thay vì Xml. Hãy thử một lần. Bạn sẽ là một chuyển đổi.

+0

Tôi đã thêm vào sau mã để SysMsgManager công cộng() var container = container mới (config => { config.For () Sử dụng (); }); _SysMsgRepository = ObjectFactory.GetInstance (); vẫn gặp lỗi tương tự. – sean717

+0

Bạn có thể gửi cho tôi dán mã thử nghiệm của bạn không? – KevM

+0

Cảm ơn sự giúp đỡ của bạn. Tôi cuối cùng nhận được tất cả mọi thứ làm việc trong CastleWindsor. Tôi nghĩ rằng tại một thời điểm tôi nhận được nó làm việc với mã của bạn đăng. Nhưng tôi vẫn muốn có cấu hình thông qua XML. – sean717

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