4

UNITY から WCF サービスのデフォルトのサービス ロケータとして Ninject に切り替えます。これを行うために利用できる美しい NuGet パッケージがあり、標準解像度を起動して実行するのは簡単です。

ただし、WCF サービスへの呼び出しを傍受したいと考えています。これが私が持っているものです:

私のsvcファイル:

<%@ ServiceHost Language="C#" Debug="true" Service="NinjectWcfApp.Service1" Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory" %>

これが私のサービスです:

public class Service1 : IService1
{


   [Inject]
    public ISomeManager Manager { get; set; }


public string GetData(int value)
{
    if(this.Manager != null)
        this.Manager.DoStuff();


    return string.Format("You entered: {0}", value);
}

}

カーネルは次のように構築されます。

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ISomeManager>().To<SomeManager>();
    kernel.Bind<IService1>().To<Service1>().Intercept().With<MyInterceptor>();
}   

このようにカーネルをセットアップすると、マネージャー インスタンスが挿入されますが、傍受は行われません。実行前と実行後に何かをログに記録するインターセプターが呼び出されることはありません。

他の Stackoverflow スレッドは、次の使用を提案しています。

    kernel.Bind<Service1>().ToSelf().Intercept().With<MyInterceptor>();

そうすれば、マネージャーは注射されません。次に、マネージャーを取り込むコンストラクターを作成すると、機能しますが、インターセプトはありません。

    kernel.Bind<Service1>().ToSelf().WithConstructorArgument("manager", kernel.Get<ISomeManager>()).Intercept().With<MyInterceptor>();

ここで何が間違っていますか?

4

1 に答える 1

0

インターセプトされるメソッドはすべて仮想でなければなりません。

    public virtual string GetData(int value)
于 2013-11-03T19:00:14.780 に答える