2013-01-03 26 views
5

DI konsepti için yeni ve structuremap için yeni. Tüm arabirimlerimin AssemblyA içinde bulunduğu bir senaryoyu doldurmaya çalışıyorum ve tüm uygulamalarım AssemblyB'da. Ben AssemblyA olduğunu ve CustomerService sınıf assemblyB içindedir AssemblyAStructuremap kullanarak Çoklu Montajlardan Bağımlılık Enjeksiyonu

public class Customer(ICustomerService) 
{ 

} 

ICustomerService gelen arabirimde bağımlılığı var yapıcısındaki AssemblyB sınıfın örneğini enjekte etmek StructureMap kullanmak istiyorum. Structuremap'in bu kurucuda CustomerService örneğini enjekte etmesini istiyorum. Sınıfın adı ile öneki ve I ile aynı arabirimin adı aynıysa, varsayalım. Structuremap bunu otomatik olarak tanıyacaktır.

Aşağıdaki yapılandırmayı yazdım.

x => 
     { 


      x.Scan(scan => 
       { 
        scan.Assembly("AssemblyA"); 
        scan.Assembly("AssemblyB"); 
        scan.TheCallingAssembly(); 
        scan.WithDefaultConventions(); 
      }); 

ama bana hata

StructureMap Exception Code: 202 
No Default Instance defined for PluginFamily AssemblyA.ICustomerService, AssemblyA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 

Herhangi bir yardım yararlı olacaktır verir. Varsayılan kuralları kullanmak ve her arayüzü bir sınıfa kaydetmekten kaçınmak istiyorum.

Teşekkürler.

cevap

1

Tamam, işe koyuldum ama şimdi daha da kafam karıştı.

Bu kod Basit katma x.IncludeNamespace ("AssemblyA") sahip Burada

IContainer container = new Container(c => 
      { 
       c.Scan(x => 
       { 
        x.Assembly("AssemblyA"); 
        x.Assembly("AssemblyB"); 
        x.IncludeNamespace("AssemblyA"); 
        x.TheCallingAssembly(); 
        x.WithDefaultConventions(); 
       }); 
      }); 

iş gibi görünüyor; Meclis'ten sonra bu isim alanına ihtiyaç olduğunu düşünerek taramaya başladı ve çalışmaya başladı.

Sorunum çözüldü, ancak sorunun ne olduğunu bilmiyorum ya da gidilecek doğru yol buysa. Herhangi bir yardım hala çok takdir edilecektir.

+0

Tamam, neler olduğunu anlayabildim. Arayüzü, taramakta olduğum farklı meclislerde uygulayan çok sayıda sınıfım vardı. Bu, soruda bildirdiğim orijinal hatayı üretir. Tüm tarama düzeneklerinde SM'nin Varsayılan Sözleşmesini karşılayan yalnızca bir sınıf varsa, soruda yayınladığım kod düzgün çalışmalıdır. Daha kötüye gitmediğim için kötüyüm ama umarım herkesin kafasını vurmasına yardım eder. x.IncludeNamespace ("AssemblyA") eklediğimde; hat temelde SM için sınıf montajını filtreledim ve çalışmaya başladı :) –

İlgili konular