我正在尝试使用流利配置的 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);
}
}
但我不确定此实例提供程序的外观(应该将 aserviceType
作为参数还是serviceObj
?
public partial class MyInstanceProvider : IInstanceProvider, IContractBehavior
因为在本书(.NET 中的 DI 注入)中,该示例使用了强耦合实例提供程序,即MyServiceType1InstanceProvider
, MyServiceType2InstanceProvider
- 但是如果我有许多服务与流利的 mef 挂钩,那将变得乏味。