Перехват Unity из базового классаC#

Место общения программистов C#
Ответить
Anonymous
 Перехват Unity из базового класса

Сообщение Anonymous »

Я хочу объявить перехват в Unity для определенного базового типа, и чтобы этот перехват автоматически учитывался для всех производных типов.

Я вижу два разных сообщения SO, посвященных одной и той же теме, но ни в одном из них нет ответа, который я ищу:
  • Перехват базового класса Microsoft Unity

    Это говорит мне о том, что я уже знаю; информации все еще недостаточно.
  • Перехват Unity в производных классах

    Это очень подробно, но относится к конфигурации Unity, а не к императивной форме, которую я использую .
Поэтому я хотел бы показать имеющийся у меня код и посмотреть, смогу ли я получить ответ, соответствующий моему сценарию.< /p>

У меня есть эти классы:

Код: Выделить всё

public abstract class RootController
{
[Report]
public abstract void Action();
}

public class MyController
{
public void Action()
{
Console.WriteLine("hey");
}
}
Аннотация [Report] — это мой собственный атрибут. Она указывает на то, что к методу следует применить ведение журнала AOP. Я организую его использование с перехватом на основе политик следующим образом:

Код: Выделить всё

container.AddNewExtension();

container.RegisterInstance(typeof(ReportAttributePolicy).AssemblyQualifiedName, new ReportAttributePolicy());

container.RegisterType(
new Interceptor(),
new InterceptionBehavior
()
);
ReportAttributePolicy — это моя собственная версия AttributeDrivenPolicy. Подробности смотрите в моем блоге Unity Interception.

Очевидно, я пытаюсь реализовать следующий сценарий:

Код: Выделить всё

        var yup = container.Resolve();
Несмотря на то, что запрошенный тип просто является производным от RootController, я бы хотел, чтобы разрешенный тип был оснащен ведением журнала AOP в соответствии с моим ReportAttributePolicy.

Когда я выполняю приведенный выше код, ни один из методов моего ReportAttributePolicy не выполняется. Это значит, что у меня нет шанса сотворить волшебство. Если я не имею дело с примером наследования, то все работает нормально.

Как мне заставить его работать с наследованием?

Подробнее здесь: https://stackoverflow.com/questions/256 ... base-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»