流暢に構成された 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
本 (.NET での DI インジェクション) の例では、強く結合されたインスタンス プロバイダー、つまり を使用していますMyServiceType1InstanceProvider
がMyServiceType2InstanceProvider
、多くのサービスが流暢な mef に接続されている場合は面倒です。