2012-12-11 36 views
5

Tôi có cấu hình Sơ đồ cấu trúc tập trung mà nhiều ứng dụng giao diện người dùng khác nhau thêm vào. Tôi chưa bao giờ có nhu cầu sửa đổi cấu hình "cốt lõi" chỉ phụ thêm vào cấu hình đó. Tôi đã chạy vào một ví dụ ngày hôm nay, nơi tôi cần phải sửa đổi/loại bỏ cấu hình cốt lõi cho một ứng dụng cụ thể. Tất nhiên tôi có thể di chuyển mã cấu hình lõi ra cho các ứng dụng khác nhau, nhưng trước khi tôi làm như vậy tôi muốn chắc chắn rằng tôi đã không thiếu một cái gì đó rõ ràng với api StructureMap. Dưới đây là một phiên bản rút gọn của cấu hình lõi của tôi:Làm thế nào tôi có thể sửa đổi cấu hình StructureMap được cấu hình trước đó?

ObjectFactory.Initialize(cfg => 
{ 
    cfg.Scan(scan => 
     { 
      scan.Assembly("Core"); 
      scan.WithDefaultConventions(); 

      scan.ConnectImplementationsToTypesClosing(typeof(IValidationRule<>)); 
      // more after this.... 
     } 
} 

Khi chạy một ứng dụng này tôi muốn loại bỏ các cấu hình cho các loại đóng IValidationRule, nhưng vẫn chưa đưa ra bất cứ điều gì khả thi. Tất cả các phương pháp đẩy dường như tập trung xung quanh ý nghĩa của singletons. Kể từ khi tôi không làm việc với một singleton sau đây không làm việc:

ObjectFactory.Model.For(typeof(IValidationRule<>)).EjectAndRemoveAll(); //no work 

ObjectFactory.Model.EjectAndRemove(typeof(IValidationRule<>)); //nor does this 

Có cách nào mà tôi có thể sửa đổi cấu hình StructureMap tôi không tìm IValidationRule s? Tôi có thể loại bỏ các phiên bản không phải là singleton của IValidationRule s không? Tôi có các tùy chọn khác để sửa đổi cấu hình StructureMap của mình không?

Trả lời

2

Điều gì tương tự như sau? Tôi nghĩ rằng điều này sẽ làm việc.

ObjectFactory.Model.EjectAndRemoveTypes(match 
    => match != null && match.GetInterfaces().Any(i 
     => i.Name.Contains("IValidationRule"))); 
+0

Có điều gì đó có thể xảy ra trong StructureMap3 mà ObjectFactory không được chấp nhận? – rexdefuror

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