我正在尝试使用unity来解析IChannelFactory<ISomeType>
的通用实例,以便为我编写的服务创建频道。
问题是此类ChannelFactory<ISomeType>
的具体版本采用具体类型System.ServiceModel.Channels.Binding
作为参数。
我的第一个问题是它找不到System.ServiceModel
但我通过放置超级完全限定名称(包括版本号等)来解决这个问题。所以现在我可以闯入代码但是当我尝试解析IChannelFactory
我的配置是这样的:
<!--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>
我得到的错误是它无法构造类型,因为它是一个接口,即使映射到具体类型显然也存在。请注意,我正在尝试将类型解析限制为特定类型,因此它仅适用于IChannelFactory<ISomeType>
而不适用于IChannelFactory<ISomeOtherType>
。或许这不是正确的做事方式吗?
如果我只是尝试孤立地解析Binding
,它说它不能从其他构造函数中取一个参数消除歧义(即使我将param类型定义为字符串!)
我在这里做错了什么想法或指示偷看?或者甚至是解决方案; - )
由于
答案 0 :(得分:0)
您可以通过以下方式配置通用接口/实现:
<type name="customerChannelFactory"
type="System.ServiceModel.Channels.IChannelFactory`1, System.ServiceModel"
mapTo="System.ServiceModel.ChannelFactory`1, System.ServiceModel">
<typeConfig>
<constructor>
<param name="binding" parameterType="System.ServiceModel.Channels.Binding, System.ServiceModel">
<dependency name="customerBinding" />
</param>
</constructor>
</typeConfig>
</type>
的更多详情
答案 1 :(得分:0)
请参阅以下内容: http://davidhayden.com/blog/dave/archive/2008/03/25/UnityDependencyInjectionOpenGenericTypes.aspx
如果有人想证明不这样做,我会非常欢迎: - )