Unity拦截:如何将参数传递给ICallHandler实现

本文关键字:参数传递 ICallHandler 实现 拦截 Unity | 更新日期: 2023-09-27 18:02:28

我可以像这样传递消息参数给ICallHandler实现吗?

var logic = container.Resolve<IBussinessLogic>(message);

并像这样使用:

IMethodReturn ICallHandler.Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
    {
        Console.WriteLine(
            string.Format(
                "Begin {0} with param {1}",
                input.MethodBase.Name, 
                message // parameter I need to be passed
            )
        );
        var result = getNext.Invoke()(input, getNext);
        Console.WriteLine("End " + input.MethodBase.Name);
        return result;
    }

?

Unity拦截:如何将参数传递给ICallHandler实现

传递给Resolve方法的message实际上是Unity要构建的命名实例名。Unity使用这个值来选择使用哪个IBusinessLogic的实现;在构造实现对象之后,它将丢失。

因此,该值仅在对象构建期间在Unity中存在;你的ICallHandler不能访问它,因为你不能拦截构造函数。

看来,Steve Wilkes是对的:"说实话,这听起来不可能使用拦截。"

http://unity.codeplex.com/discussions/265679