2009-03-13 16 views
2

私はそれを実装する2クラスとインターフェイスを1つ持って、私は各クラスをロードする必要がありますが、団結がありますUnity Framework:同じインターフェースから2つのクラスをインスタンス化する方法は?

m_unityContainer.Resolve()//

私の設定は次のようになりIGenericインタフェースです:

は、
 <type type="IGeneric" mapTo="ClassA"> 
     </type> 
     <type type="IGeneric" mapTo="ClassB"> 
     </type> 

アイデア?

ありがとう

+0

と私は設定して、同時にこのような –

答えて

1

これは、IGenericを実装するすべての登録クラスを提供します。

IEnumerable<IGeneric> objects = container.ResolveAll<IGeneric>(); 
0

私は解決策を発見し、nameプロパティは、各エントリで使用する必要があります。




とコードが OBJ = container.ResolveAllのようになります。 (「ClassA」);

2

また、次のように一般的なインタフェースを使用することができます。

public interface IGeneric{} 

public interface IGeneric<T> : IGeneric{} 

は、次にインタフェースのタイプセーフ解像度があります:あなたがダウンしたときに

container.RegisterType<IGeneric<ClassA>, ClassA>(); 
container.RegisterType<IGeneric<ClassB>, ClassB>(); 

ClassA classA = container.Resolve<IGeneric<ClassA>>(); 
ClassB classB = container.Resolve<IGeneric<ClassB>>(); 

をいくつか面白いことが起こって開始この道...

+0

何かを両方のクラスをインスタンス化する必要があります。 Schalk

0

ショール - よく見えます。 Unity.configでそれを指定する表記法は何でしょうか?

0

ここでは若干異なる方法があります。私はUnity.2.1.505.2を使用しています(違いがある場合に備えて)。

<configSections> 
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> 
    </configSections> 


     <unity> 
     <container> 
      <register type="IVehicle" mapTo="Car" name="myCarKey" /> 
      <register type="IVehicle" mapTo="Truck" name="myTruckKey" /> 
     </container> 
     </unity> 

ここはDotNetコードです。

 UnityContainer container = new UnityContainer(); 

     UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); 
     section.Configure(container); 


IVehicle v1 = container.Resolve<IVehicle>("myCarKey"); 

IVehicle v2 = container.Resolve<IVehicle>("myTruckKey"); 

参照:

http://msdn.microsoft.com/en-us/library/ff664762(v=pandp.50).aspx