2011-07-18 2 views
3

Могу ли я передать сообщение параметр для реализации ICallHandler так:Unity Interception: Как передать параметр в реализацию 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

message Вы переходите к методу Resolve, на самом деле это имя именованного экземпляра для построения Unity. Это значение используется Unity, чтобы выбрать, какую реализацию использовать IBusinessLogic; после создания объекта реализации он теряется.

Это значение, следовательно, находится только в пределах Единства во время строительства объекта; ваш ICallHandler не может получить к нему доступ you cannot intercept constructors.

+0

Я знаю, что этот код не работает. Я написал это, чтобы описать свою идею. Все, что мне нужно - передать параметр из кода вызова вызова в реализацию ICallHandler. Также я обнаружил, что можно каким-то образом передать параметр конструктору реализации ICallHandler. Но ICallHandler contructor вызывает только один раз на контейнер (как я тестировал). Но мне нужен параметр pass avery time, который я вызываю Resolve <>(). –

+0

Какова природа 'сообщения'? Это то, что вы знаете во время разработки? –

+0

В моем примере это ** строка **. В моем реальном приложении это ** System.Web.Services.WebService **. Мой аспект пытается предварительно подготовить препараты с экземпляром ** WebService ** до того, как будет вызвана реальная логика. –

Смежные вопросы