1

Ninject を使用して、型に対してインターセプトを選択的に使用しようとしています。実装が特定のインターフェイスを実装している場合、それをインターセプトしたいと考えています。Ninject Activation Context をチェックして、そのターゲットがインターフェースを実装しているかどうかを確認するにはどうすればよいですか?

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var kernal = new StandardKernel();
        kernal.Bind<IFoo>().To<Foo>();

        kernal.Intercept(x =>
        {
            if (x is an IGetIntercepted)
            {
                return true;
            }
            return false;
        });
    }

    public interface IGetIntercepted
    { }

    public interface IFoo
    { }

    public class Foo : IFoo, IGetIntercepted
    { }
}
  • この例では、IFoo ではなく Foo をチェックしたいことに注意してください。(IFoo は Ninject.Activation.Binding.Service プロパティで簡単に見つかります)
4

1 に答える 1

1

Plan プロパティを見落としていましたが、これはうまくいくようです:

if (x.Plan.Type.GetInterface(typeof(IGetIntercepted).FullName) != null)
{
    return true;
}
于 2015-01-07T19:37:37.343 に答える