我想用自定義構造函數來使用流利配置的MEF來提升我的WCF服務。如何將流利的MEF注入WCF
如何檢查MEF容器是否提供「serviceType」。例如:
public class MyServiceHostFactory : ServiceHostFactory
{
private readonly CompositionContainer container;
public MyServiceHostFactory()
{
this.container = MyCompositionRoot.Instance.Container;
}
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
if (serviceType == ????)
{
return new MyServiceHost(container, serviceType, baseAddresses);
}
return base.CreateServiceHost(serviceType, baseAddresses);
}
}
,然後我需要一個實例提供程序添加到我的行爲:
public MyServiceHost(CompositionContainer container, Type serviceType,
params Uri[] baseAddresses) : base(serviceType, baseAddresses)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
var contracts = this.ImplementedContracts.Values;
foreach (var c in contracts)
{
// Should I get the service obj here?
var serviceObj = container.GetExports(serviceType, null, null).First().Value;
var instanceProvider = new MyInstanceProvider(serviceObj); // ????
c.Behaviors.Add(instanceProvider);
}
}
,但我不知道這種情況下供應商應該如何看(它應該採取serviceType
作爲一個參數或所述serviceObj
?
public partial class MyInstanceProvider : IInstanceProvider, IContractBehavior
因爲在書(DI噴射在.NET)的例子中使用了強耦合實例提供的,即MyServiceType1InstanceProvider
,MyServiceType2InstanceProvider
- 但如果我有很多服務與流暢的mef聯繫在一起,那會很乏味。
謝謝,這有幫助。至少我現在有一種做法! – drozzy
謝謝,你能看看我更新的問題,看看你是否可以告訴我如何進行? – drozzy