2010-05-26 31 views
20

Tôi mới vào StructureMap. Tôi đã tải xuống và đang sử dụng bằng phiên bản 2.6.1.0. Tôi tiếp tục nhận được dưới đây lỗi:Cấu trúc mã ngoại lệ bản đồ: 202 Không có trường hợp mặc định được xác định cho PluginFamily

StructureMap Exception Code: 202 No Default Instance defined for PluginFamily Company.ProjectCore.Core.IConfiguration, Company.ProjectCore, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

My Global.asax.cs trông giống như:

protected void Application_Start(object sender, EventArgs e) 
{ 

    var container = new Container(x => 
        { 
         x.For<ICache>().Use<Cache>(); 
         x.For<IEmailService>().Use<EmailService>(); 
         x.For<IUserSession>().Use<UserSession>(); 
         x.For<IRedirector>().Use<Redirector>(); 
         x.For<INavigation>().Use<Navigation>(); 
        }); 

       container.AssertConfigurationIsValid(); 

} 

tôi đã thay đổi từ ObjectFactory.Initialize để "mới container" để gỡ lỗi. Khi bước qua phương pháp AssertConfigurationIsValid(), Cache công trình nhưng EmailService thất bại ở phương pháp getInstance trong dòng sau:

[Pluggable("Default")] 
public class EmailService : IEmailService 

private readonly IConfiguration _configuration; 

public EmailService() 
{ 
    _configuration = ObjectFactory.GetInstance<IConfiguration>(); 
} 

Nếu tôi loại bỏ IEmailService, cùng lỗi 202 được ném vào IUserSession.

Tôi có nên thêm thứ gì đó khác vào Application_Start hoặc trong tệp lớp học của mình không?

Cảm ơn trước ...

+0

StructureMap thuộc lớp ứng dụng nào? Lớp giao diện người dùng, doanh nghiệp hoặc dữ liệu? – Rod

Trả lời

18

Vấn đề này đã được cố định bằng cách thay thế ObjectFactory.Initialize với ObjectFactory.Configure và thêm các hội đồng trong dự án của tôi:

ObjectFactory.Configure(x => 
{ 
    x.Scan(scan => 
    { 
     scan.LookForRegistries(); 
     scan.Assembly("MyAssembly"); 
     scan.Assembly("MyAssembly"); 
    }); 
}); 
+0

Cảm ơn vì điều đó. Nó hoạt động tốt. Bạn có thể đánh dấu nó làm câu trả lời được không. Bởi vì nó dễ dàng cho người đọc. – Saghar

6

Trường hợp khởi động của bạn cho lớp bê tông IConfiguration ở đâu?

Ie:

x.For<IConfiguration>().Use<Configuration>(); 
+0

Vâng .. Tôi đã thử thêm điều đó và nó không có vẻ quan trọng. Khi nó ở đó, nó không bao giờ trúng. Khi tôi nhận xét tất cả các lớp khác, trình biên dịch hoạt động như thể nó không có ở đó và chỉ đi đến khối mã tiếp theo. Ngoài ra, như tôi đã chỉ ra trước đây, nếu tôi đưa ra IEmailService (nơi IConfiguration được gọi là) giao diện tiếp theo - IUserSession - được gọi và tôi nhận được lỗi 202 một lần nữa. Vì vậy, tôi không nghĩ rằng câu trả lời cho vấn đề của tôi là làm thế nào tôi đang bootstrapping IConfiguration. –

+2

Câu trả lời cho vấn đề của bạn chắc chắn là cách bạn đang khởi động. Lỗi StructureMap 202 có nghĩa là bạn chưa nói với StructureMap cách giải quyết sự phụ thuộc (trong bootstrapping của bạn). Trong trường hợp cụ thể này, bạn không bao giờ nói với nó cách giải quyết một IConfiguration. –

11

tôi đã nhận được thông báo lỗi tương tự, nhưng vì một lý do khác nhau . Tôi đã có một Foo lớp mà định nghĩa hai cấu trúc như sau:

public class Foo : IFoo 
{ 
    private Bar _bar; 

    public Foo() 
    { 
     _bar = new Bar(); 
    } 

    public Foo(Bar bar) 
    { 
     _bar = bar; 
    } 
} 

và cấu hình StructureMap của tôi là như vậy:

For<IFoo>.Use<Foo>(); 

tôi vẫn tiếp tục nhận được một thông báo lỗi như

202 No Default Instance defined for Bar

Vấn đề là StructureMap đã cố gắng để xây dựng một Foo bằng cách sử dụng constructor có một tham số, thay vì sử dụng constructor mặc định parameterless. Tôi đã giải quyết nó bằng câu trả lời trong How to define a default constructor by code using StructureMap? như sau:

For<IFoo>.Use(() => new Foo()); 
2

Tôi đã gặp lỗi tương tự. Trong trường hợp của tôi, tôi đã có lỗi đánh máy trong tên triển khai, do đó tên giao diện và tên triển khai không khớp.

public class FooTypo : IFoo 

đâu tôi nên đã có:

public class Foo : IFoo 
0

Khi tôi đã nhận lỗi này đó là vì tôi quên để đánh dấu lớp học của tôi public. Thật đơn giản.

0

Tôi cũng gặp sự cố này khi tôi đang sử dụng Visual Studio 2015 với NCrunch. Tất cả những gì bạn phải làm là chuyển một tùy chọn sang đúng trong mục menu cấu hình bên dưới NCrunch.Chuyển đổi khởi tạo thành cấu hình không hoạt động đối với tôi.

Các tùy chọn là bên dưới Cài đặt xây dựng, nó được đặt tên là 'Sao chép cụm tham chiếu đến không gian làm việc'

1

Một điều cần tìm kiếm là để đảm bảo rằng sự phụ thuộc (class) mà bạn đang tiêm là công . Nếu lớp là nội bộ, nó có thể gây ra vấn đề này.

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