2011-07-18 38 views
3

我可以通过消息参数ICallHandler实现这样的:Unity拦截:如何将参数传递给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; 
    } 

回答

1

您传递给Resolve方法的message实际上是Unity构建的命名实例名称。 Unity使用此值来选择IBusinessLogic的哪个实现;在执行对象的构建之后,它会丢失。

因此,该值仅在对象构建期间处于Unity范围内;您的ICallHandler无法以you cannot intercept constructors的身份访问它。

+0

我知道这段代码不起作用。我写这个来描述我的想法。我所需要的 - 将解析调用代码的参数传递给ICallHandler实现。 另外我发现它可能以某种方式将参数传递给ICallHandler实现构造函数。但是ICallHandler构造器每个容器只调用一次(就像我测试的那样)。但是我每次调用Resolve <>()时都需要传递参数。 –

+0

'message'的性质是什么?这是你在设计时知道的吗? –

+0

在我的例子中它是** string **。在我的真实世界的应用程序它是** System.Web.Services.WebService **。我的方面试图在实际逻辑被调用之前用** WebService **实例进行准备工作。 –

相关问题