私は通常、シングル インスタンス コンテキスト モードを使用する WCF サービスを使用しています。また、サービス コントラクトと動作は WCF サービス ライブラリにあります。
サービスが Windows サービスまたは Web サービスとしてホストされている場合、WCF サービス ライブラリを参照する独自のプロジェクトを取得します。この WCF サービス ライブラリを実行し続けたい (単に WCF テスト クライアントでデバッグするため)のですが、動作クラスを使用して依存関係を解決しようとすると、多大な労力が必要になります。
Castle Windsor を使用して、 Castle Windsor WCF Integration Facilityの追加構成も行う必要があります。サービスの起動時にオブジェクト グラフを解決しようとしているところですが、それほど難しくはないと思います。
ビヘイビアインスタンスは一度しか作成されないので、コンポジションルートとして使用できるはずだと思いました。単一のオブジェクトを使用してすべての依存関係を提供し、次のようにコンテナーから解決できます。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class SampleService : ISampleService, IDisposable
{
private readonly IServiceManager _serviceManager;
private readonly IWindsorContainer _container;
public SampleService()
{
_container = new WindsorContainer();
_container.Install(new ServiceInstaller());
_serviceManager = _container.Resolve<IServiceManager>();
}
public string GetMessage()
{
return _serviceManager.GetMessage();
}
public void Dispose()
{
_container.Dispose();
}
}
コンテナーに依存関係を解決するように明示的に要求するのは悪い考えだとわかっていますが、これにより多くの問題を回避できます。デフォルトの WCF 構成を維持できます。デフォルトのコンストラクターがあるため、デバッグ用に WCF サービス ライブラリを実行できます。また、前回チェックしたときにドキュメントが欠落していた Castle Windsor WCF integration Facility を使用する必要もありません。
Castle Windsor WCF integration Facility はより多くの機能を提供すると思いますが、依存関係を解決したいだけです。このアプローチは、いくつかの問題を引き起こす可能性がありますか? 私は誰もこのようなことをしているのを見たことがないので、これが合法的な使用かどうか知りたい.