2

こんにちは、ユニティ インターセプトを使用しようとしています (ユニティ コンテナーは使用したくありません)。ランタイムを構成できますが、構成から構成する方法がわかりません。

私のコード:

public interface ICalculator
{
    int Add(int first, int second);

    int Multiply(int first, int second);
}

行動:

  internal class LogBehavior : IInterceptionBehavior 
    {
        public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
        {
            // My Code
            IMethodReturn result = getNext()(input, getNext);
            return result;
        }

        public IEnumerable<Type> GetRequiredInterfaces()
        {
            return Type.EmptyTypes;
        }

        public bool WillExecute {
            get { return true; }
        }
    }

そして、これが私がそれを呼んでいる方法です

    public static void Main(string[] args)
    {

        var calculator = new Calculator();
        var calculatorProxy = Intercept.ThroughProxy<ICalculator>(calculator,
          new InterfaceInterceptor(), new[] { new LogBehavior() });
        Console.WriteLine(calculatorProxy.Add(2, 2));

        Console.ReadKey();
    }

これは機能しています。これを構成ファイルから構成する必要があります。助けてください

4

1 に答える 1

0

コンテナーがないと、プロキシのインスタンス化を自分で行う必要があります。それがIntercept.ThroughProxy<>コールです。別のコンテナーを使用している場合は、それを拡張して構成を読み取り、それに応じて処理することができます。

しかし、.net / unity に構成ファイルを読み取らせて実行させるだけで、構成ファイルで定義されたインターセプターでプロキシおよびインターセプトされるという魔法はnew Calculator()ありません。それを処理するように拡張することはできず、そのため、のインスタンスを要求する必要があるコンポーネントが常に存在します。これにより、プロキシが必要かどうか、および必要なインターセプターがチェックされます...CalculatornewICalculator

もちろん、これには例外があります。ウィービング ( FodyPostSharp ) を使用すると、動的プロキシを使用せずに AOP を実行できます。そして、実際に行うことができnew Calculator()、コアの実装だけでなく、その側面も備えています...

于 2014-10-07T11:31:11.340 に答える