.NET, Architecture, ALM, Cloud
<unity>
<typeAliases>
<typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
</typeAliases>
<containers>
<container name="myContainer">
<types>
<type name="TradeSingleton" type="UAB.Demo.Interfaces.ITradeService, UAB.Demo.Interfaces" mapTo="UAB.Demo.MyTradeGateway.MyTradeGatewayService, UAB.Demo.MyTradeGateway">
<lifetime type="singleton" />
</type>
</types>
</container>
</containers>
</unity>
[Dependency]
public ILoggerService Logger
{
get { return _logger; }
set { _logger = value; }
}
Enfin, pour pouvoir utiliser le service ITradeService, il vous suffit d'ensuite d'accéder à votre container comme suit :
public static class ServiceContainer
{
private static IUnityContainer _container = null;
public static IUnityContainer Container
{
get
{
if (_container == null)
{
_container = new UnityContainer();
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Containers["myContainer"].Configure(_container);
}
return _container;
}
}
}
Puis il vous suffit de faire appel à la méthode Resolve pour récupérer votre service en spécifiant le type du service à charger :
ITradeService tradeServiceSingleton = ServiceContainer .Container.Resolve<ITradeService>();
Vous pouvez enregistrer plusieurs fois le même type dans le même container par contre il vous faudra pour cela donner un nom pour pouvoir ensuite récupérer l'implémentation souhaité en spécifiant le nom configuré en paramètre de la méthode "Resolve".
Enfin pour casser le lien entre le service et Unity et ne pas avoir les attributs Unity pour gérer les injections, vous pouvez spéicifer dans la configuration d'Unity les propriétés d'injections de dépendance.