2009-03-13 6 views

Répondre

1

Cela vous donnera toutes les classes qui mettent en œuvre iGeneric.

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

Je trouve la solution, une propriété de nom doit être utilisé dans chaque entrée:




et le code ressemblera obj = container.ResolveAll ("Classe A");

2

Vous pouvez également utiliser une interface générique comme suit:

public interface IGeneric{} 

public interface IGeneric<T> : IGeneric{} 

Ensuite, une résolution sûre de type de l'interface:

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

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

Certaines choses intéressantes commencent à se produire quand vous allez vers le bas cette route ...

+0

Quelque chose comme ça dans config: Schalk

0

Schalk - regarde bien. Quelle serait la notation pour spécifier cela dans le fichier Unity.config?

0

Voici une manière légèrement différente. J'utilise Unity.2.1.505.2 (juste au cas où cela ferait une différence).

<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> 

Voici le code 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"); 

Voir:

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

Questions connexes