Lors de l'enregistrement et de la résolution de types dans un conteneur Unity à l'aide de code, vous pouvez utiliser les 'Noms d'enregistrement' pour désambiguïser vos références dérivées d'une interface ou d'une hiérarchie de classes de base.Qu'est-ce qui correspond au «nom d'enregistrement» de Unity dans la section de configuration de l'unité?
Le texte « nom d'enregistrement » serait fourni en tant que paramètre au registre et à la détermination des méthodes:
myContainer.RegisterType<IMyService, CustomerService>("Customers");
et
MyServiceBase result = myContainer.Resolve<MyServiceBase>("Customers");
Cependant quand je vous inscrire types dans les fichiers de configuration Je ne ai pas voir où le 'nom d'enregistrement' peut être attribué
Je m'inscris une interface:
<typeAlias alias="IEnlistmentNotification" type="System.Transactions.IEnlistmentNotification, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Ensuite, deux types que je connais mettre en œuvre cette interface:
<typeAlias alias="PlaylistManager" type="Sample.Dailies.Grid.Workers.PlaylistManager, Sample.Dailies.Grid.Workers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<typeAlias alias="FlexAleManager" type="Sample.Dailies.Grid.Workers.FlexAleManager, Sample.Dailies.Grid.Workers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
Je fournissent les correspondances entre l'interface et les deux types:
<type type="IEnlistmentNotification" mapTo="FlexAleManager"><lifetime type="singleton"/></type>
<type type="IEnlistmentNotification" mapTo="PlaylistManager"><lifetime type="singleton"/></type>
Cela semble correspondre à ce code :
myContainer.RegisterType<IEnlistmentNotification, FlexAleManager>();
myContainer.RegisterType<IEnlistmentNotification, PlaylistManager>();
mais clairement ce dont j'ai besoin est une entrée de configuration désambiguïsante t correspond à ce code:
myContainer.RegisterType<IEnlistmentNotification, FlexAleManager>("Flex");
myContainer.RegisterType<IEnlistmentNotification, PlaylistManager>("Play");
Alors quand je rentre dans mon code que je pouvais faire ceci:
IEnlistmentNotification flex = myContainer.Resolve<IEnlistmentNotification>("Flex");
IEnlistmentNotification play = myContainer.Resolve<IEnlistmentNotification>("Play");
Voyez ce que je veux dire?
Merci,
Kimball
Kimball Utilisez le xsd la config pour éviter « disparus » sur des choses à l'avenir ;-): http://unitycontributions.codeplex.com/WorkItem/View.aspx?WorkItemId=2309 –
S'il vous plaît , monsieur, tout échantillon (avec toutes les sources complètes et les tests) en utilisant IEnlistmentNotification "?? – Kiquenet