2

XML ファイルを介して構成されたユニティ コンテナーがあります。構成したら、コードを介して特定の型に傍受を追加したいと考えています。これはどのように行うことができますか?次の動作があります。

using System;
using System.Collections.Generic;
using System.Web.Mvc;
using Microsoft.Practices.Unity.InterceptionExtension;
using NLog;

namespace WebDibaelsaMVC.Utils.Behaviors
{
    public class LoggingBehavior : IInterceptionBehavior
    {
        private readonly Logger _log = LogManager.GetLogger("Unity");

        public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
        {
            var msg = getNext()(input, getNext);
            if (msg.Exception != null)
                _log.ErrorException("Error d'unity.", msg.Exception);
            return msg;
        }

        public IEnumerable<Type> GetRequiredInterfaces()
        {
            return new[] {typeof (IController)};
        }

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

そして、コンテナーを介して解決される型の IController メソッドへのすべての呼び出しが、この動作を通過するようにします。どうすればいいですか?

4

1 に答える 1

4

構成を読み込んだ後、構成 API を呼び出すだけです。「構成時間」に魔法はありません。Unity のルールは「最後の構成が優先」です。したがって、XML からロードし、API を使用して何かを実行し、2 番目の XML セクションをロードすると、それらはすべてまとめてロードされます。

MVC でインターセプトを使用している場合、正しく動作させる唯一の方法は VirtualMethodInterceptor を使用することであることに注意してください。インスタンスインターセプターを使用すると、すべてを正しく機能させるためにカスタムアクションインボーカーも必要になります (私を信じてください、私は試しました)。

于 2011-04-07T05:19:20.137 に答える