私はWCFサービスにいくつかのビジネスサービスを注入しようとしています。私は本当にポストinteresstingこれを読んで:How do I pass values to the constructor on my wcf service?WCFサービスに依存関係を注入する方法
そして、私は次のことを行っている:
カスタムのServiceHost
public class UnityServiceHost : ServiceHost
{
public UnityServiceHost(IUnityContainer container, Type serviceType, params Uri[] baseAddresses)
: base(serviceType, baseAddresses)
{
if (container == null)
{
throw new ArgumentNullException(nameof(container));
}
foreach (ContractDescription contractDescription in ImplementedContracts.Values)
{
contractDescription.Behaviors.Add(new UnityInstanceProvider(serviceType, container));
}
}
}
カスタムインスタンスプロバイダ
public class UnityInstanceProvider : IInstanceProvider, IContractBehavior
{
private readonly Type m_serviceType;
private readonly IUnityContainer m_container;
public UnityInstanceProvider(Type serviceType, IUnityContainer container)
{
m_serviceType = serviceType;
m_container = container;
}
public object GetInstance(InstanceContext instanceContext, Message message)
{
return GetInstance(instanceContext);
}
public object GetInstance(InstanceContext instanceContext)
{
return m_container.Resolve(m_serviceType);
}
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
(instance as IDisposable)?.Dispose();
}
public void AddBindingParameters(ContractDescription contractDescription, ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { }
public void ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime) { }
public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
{
dispatchRuntime.InstanceProvider = this;
}
public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint) { }
}
サービスの振る舞いこと私はこのように見ている:
[ServiceBehavior]
public class MyService : IMyService
{
public ServerInformationService(ISomeDependency coreManager)
{
//...
}
}
しかし、私はGetInstance
に得ることはありません、と私は、コードを実行したとき、私はこれを取得:
それ にはないので、提供されるサービスの種類をサービスとしてロードすることができませんでしたデフォルトの(パラメータのない)コンストラクタを持つ 問題を修正するには、型にデフォルトのコンストラクタを追加するか、 のインスタンスをホストに渡します。
どうしたのですか?私のインスタンスプロバイダが使用されていないように見える
これは、注入しようとしている依存関係にパラメータのないコンストラクタがあることを示しています。 – ArunGeorge
@A runGeorge私はそうではないと思います。イベントは 'return m_container.Resolve(m_serviceType);'ブレークポイントで停止しません。私はWPF以外の依存関係を持つ同じ正確なサービスを要求することができます。 – J4N
サービスはIISでホストされていますか?あなたは 'UnityServiceHost'クラスを使っていますか? –