Я только начал использовать Unity и возможности перехвата. Я создал прототип, чтобы проверить ограничение или возможности, и мне кажется, что для перехвата метода необходимо выполнить несколько условий. В частности, мне кажется, что класс или интерфейс должны быть разрешены через контейнер. Это верно? Есть ли какой-нибудь метод, который позволяет мне делать это без этого требования.
Возможно, я неверно истолковываю, как правильно это использовать, поскольку существует много более старой и частичной информации без хороших рабочих примеров.
Я обновлю немного кода. Пожалуйста, имейте в виду, что в этой вещи тысячи и тысячи строк кода, поэтому изменение этого плохого дизайна не является вариантом и выходит за рамки данного текущего проекта.
<code>
public interface IApoClass
{
[LoggingCallHandler]
void SomeAbstractAopMethod(string abstractparam);
[LoggingCallHandlerAttribute]
void SomeVirtualAopMethod(string virtualparam);
}
public abstract class AbstractAopClass : IApoClass
{
public abstract void SomeAbstractAopMethod(string whatthe);
public virtual void SomeVirtualAopMethod(string abstractparam)
{
//essentiall do nothing
return;
}
}
public class NonAbstractAopMethod : AbstractAopClass
{
public override void SomeAbstractAopMethod(string whatthe)
{
Console.Write("I am the only enforced method");
}
}
Контейнер:
container.AddNewExtension<Interception>();
//container.Configure<Interception>().SetInterceptorFor<IFrameworkInterceptionTest>(new InterfaceInterceptor());
container.Configure<Interception>().SetInterceptorFor<IApoClass>(new InterfaceInterceptor());
Телефонный код:
//resolve it despite it not having and definition, but we've wired the container for the interface implemented by the abstract parent class
var nonabstractmethod = DependencyResolver.Current.GetService<NonAbstractAopMethod>();
nonabstractmethod.SomeAbstractAopMethod("doubt this works");
nonabstractmethod.SomeVirtualAopMethod("if the above didn't then why try");