2012-12-11 8 views
5

Çeşitli kullanıcı arabirimi uygulamalarının eklediği merkezi bir StructureMap yapılandırmasına sahibim. Sadece ona ek olarak "çekirdek" konfigürasyonunu değiştirme ihtiyacım olmadı. Belirli bir uygulama için çekirdek yapılandırmasını değiştirmem/kaldırmam gereken bir örneğe rastladım. Tabii ki çekirdek konfigürasyon kodunu farklı bir uygulamaya taşıyabilirim ama bunu yapmadan önce StructureMap API ile belirgin bir şey eksik olmadığından emin olmak istedim. Aşağıda benim çekirdek yapılandırmasının kısaltılmış versiyonudur: Ben IValidationRule kapanış türleri için yapılandırmayı kaldırmak ister ama canlı bir şey ile gelip henüz olurdu bu bir uygulama için Çalışma zamanındaÖnceden yapılandırılmış bir StructureMap yapılandırmasını nasıl değiştirebilirim?

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

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

. Çıkartma yöntemlerinin tümü, tektonların etrafında ortalanıyor gibi görünüyor. Ben bir singleton ile uğraşan değilim beri şu çalışmaz: Ben IValidationRule s için görünmüyor benim StructureMap yapılandırmasını değiştirebilir bir yol

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

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

var mı? Tekli olmayan örnekleri IValidationRule s çıkarabilir miyim? StructureMap yapılandırmamı değiştirmek için başka seçeneklerim var mı?

cevap

2

Aşağıdaki gibi bir şeye ne dersiniz? Bunun işe yarayacağını düşünüyorum.

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

ObjectFactory'nin kullanımdan kaldırıldığı StructureMap3'te bu gibi bir şey mümkün mü? – rexdefuror