2009-11-24 3 views
2

Я играл вокруг с Unity, чтобы сделать некоторые вещи АОПА, настройку через МОК, как:Единство МОК, АОП и интерфейс Перехват

ioc.RegisterType<ICustomerService, CustomerService>() 
    .Configure<Interception>().SetInterceptorFor<ICustomerService>(new InterfaceInterceptor()); 

... и затем имеющий ICallHandler на методах интерфейса ICustomerService в , В течение всего времени я хочу просто вызвать метод, класс, в котором он находится, и пространство имен для этого класса. Так что ... внутри ...

public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) 

... метод ICallHandler, я могу получить доступ к имени метода с помощью input.MethodBase.Name ... если я использую input.MethodBase.DeclaringType.Name я получить интерфейс ICustomerService ... НО ... как бы я хотел получить реализацию класса CustomerService, а не интерфейса?

Мне сказали, чтобы использовать input.Target .. но это просто возвращает «DynamicModule.ns.Wrapped_ICustomerService_4f2242e5e00640ab84e4bc9e05ba0a13»

Любая помощь на этом люди?

ответ

1

Я попытался сделать что-то подобное некоторое время назад, я провел некоторое исследование через исходный код Unity, и единственным решением, которое я придумал, было получение экземпляра CustomerService путем отражения от частного поля input.Target (я не знаю, t запомнить его имя, вы можете легко найти его в отладчике). Я знаю, что это не элегантное и удобное решение, но похоже, что это все, что мы можем сделать.

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