J'essaie d'utiliser l'unité pour résoudre une instance générique du IChannelFactory<ISomeType>
pour créer des canaux à un service que j'ai écrit.configuration de l'unité ouvrir les types génériques
Le problème est que la version concrète de cette classe ChannelFactory<ISomeType>
prend comme paramètre le type de béton System.ServiceModel.Channels.Binding
.
Mon premier problème était qu'il ne pouvait pas trouver System.ServiceModel
mais j'ai résolu cela en mettant le nom super qualifié (y compris le numéro de version, etc.). Alors maintenant, je peux briser dans le code, mais il explose lorsque je tente de résoudre un IChannelFactory
Ma config est en tant que tel:
<!--binding-->
<type name="customerBinding" type="System.ServiceModel.BasicHttpBinding, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<constructor>
<param name="configurationName" parameterType="System.String">
<value value="CustomerAccountService" />
</param>
</constructor>
</typeConfig>
</type>
<!-- customer account channel factory -->
<type name="customerChannelFactory"
type="System.ServiceModel.Channels.IChannelFactory`1[[ServiceContracts.Customer.ICustomerAccountProvider, ServiceContracts.Customer]], System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
mapTo="System.ServiceModel.ChannelFactory`1[[ServiceContracts.Customer.ICustomerAccountProvider, ServiceContracts.Customer]], System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<constructor>
<param name="binding" parameterType="System.ServiceModel.Channels.Binding, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<dependency name="customerBinding" />
</param>
</constructor>
</typeConfig>
</type>
L'erreur que je reçois est qu'il ne peut pas construire le type parce qu'il est une interface, même si le mappage à un type concret est clairement là. Notez que j'essaie de restreindre la résolution de type à des types spécifiques, donc cela ne fonctionne qu'avec IChannelFactory<ISomeType>
et pas IChannelFactory<ISomeOtherType>
, par exemple. Peut-être que ce n'est pas la bonne façon de faire les choses?
Si j'essaie juste de résoudre le Binding
en vase clos, il dit qu'il ne peut pas lever l'ambiguïté d'autres constructeurs qui prennent un paramètre (même si je défini le type de param être string!)
Toutes les idées ou des pointeurs ce que je fais mauvais peeps ici? Ou peut-être même une solution ;-)
Merci
Je suis heureux de voir que je ne suis pas le seul qui ne peut jamais comprendre ce qui passe chaque fois que j'essaye quelque chose de non-trivial avec Unity! – fearofawhackplanet
haha je lisais juste ta question sur l'unité et les génériques il y a deux secondes! belle référence de l'ennemi public d'ailleurs :-) – WickyNilliams
Êtes-vous résoudre avec le nom de l'enregistrement? –