2014-10-14 4 views
0

Я использую Unity Container для перехвата , поэтому я пытаюсь добавить атрибут [Trace], например.Могут ли атрибуты реализовать интерфейс?

общественного класс TraceAttribute: HandlerAttribute

, а затем в коде, я могу использовать его так:

public class MyClass 
{ 
    [Trace] 
    public void DoSomething() 
    { 
     ... 
    } 
} 

Вот мой вопрос/цель: Я не хочу трассировки атрибут, привязанный к перехвату Unity. Если я позже изменю контейнеры DI или захочу реализовать свои собственные и т. Д., Я бы хотел поменять его, как и на интерфейсы.

что-то вроде:

общедоступного интерфейса TraceAttribute: ITraceAttribute

и затем конкретная реализация? это возможно?

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

Спасибо!

+1

Я уверен, что его * возможно *, но он, вероятно, ничего не сделал. Если Unity ищет «HandlerAttribute», вы не сможете заставить его искать «ITraceAttribute». – BradleyDotNET

ответ

0

В атрибуте C# должен быть класс, который прямо или косвенно получен из класса System.Attribute. Это означает, что с помощью стандартных инструментов вы не можете использовать интерфейс в качестве атрибута.

Для вашего сценария вы можете создать атрибут, способный создать необходимый экземпляр из Unity. Если вы используете это для фильтров MVC, вы можете увидеть сценарий на данный момент, чтобы установить это значение here. В других случаях это может быть сложнее, но вы все равно можете достичь этого с помощью своего рода локатора сервисов.