Windows サービスでホストされている wcf サービス ライブラリがあります。Service メソッドの呼び出しをインターセプトする必要があります。この場合、このリンクで見られるように、WCF を Unity コンテナーに登録することをお勧めします。
http://weblogs.asp.net/fabio/archive/2009/03/24/inversion-of-control-with-wcf-and-unity.aspx
Codeplex の Unity.WCF アセンブリによって同様のアプローチを実装しようとしています。コンテナー構成またはブートストラップを wcf サービス ライブラリ (または Windows サービス) のどこに置くべきか理解できませんでした。固体サンプル (対溶液) は提供されていません。
マイ Windows サービス ホスト
private UnityServiceHost _serviceHost = null;
private readonly UnityContainer _container;
public Service() {
InitializeComponent();
_container = new UnityContainer();
_container.AddNewExtension<Interception>();
_container.RegisterType<ISecurityRepository, SecurityRepository>();
_container.Configure<Interception>().SetDefaultInterceptorFor<ISecurityRepository>(new TransparentProxyInterceptor());
}
protected override void OnStart(string[] args) {
//SecurityService
if (_serviceHost != null) {
_serviceHost.Close();
} else {
_serviceHost = new UnityServiceHost(_container, typeof(SecurityRepository));
_serviceHost.Open();
}
}
protected override void OnStop() {
//SecurityService
if (_serviceHost != null) {
_serviceHost.Close();
_serviceHost = null;
}
}
私のサービス契約
[ServiceContract(SessionMode = SessionMode.Required)]
public interface ISecurityRepository
{
[OperationContract(IsInitiating = true)]
IList<vNavigationTree> GetNavigationTree(string ticket);
[OperationContract(IsInitiating = true)]
string GetSessionGuid(string userName, string IP, string machineName);
}
この場合、インターセプターは機能しないようです。簡単に言うと、WCF サービスが DI コンテナーに登録され、サービス メソッドがインターセプトされるサンプル プロジェクトが必要です。