Внедрение зависимостей в аннотацию класса - PullRequest
0 голосов
/ 26 октября 2010

Я пытаюсь выяснить, как сделать следующее:

[CustomAnnotation(thisVariableShouldBeInjected)]
public class MyClass
{
    // Normal class stuff
}

Теперь аннотация данных украшает класс обслуживания WCF, в котором происходит внедрение конструктора.В идеале я хотел бы добавить аннотацию к значению, используя контейнер Ninject IOC, однако этот вопрос не зависит от контейнера.

Я просто реорганизовал класс Annotation из статического класса, и мне не хотелось бы преобразовывать его обратно.

Я рад сделать внедрение свойства (внедрение конструктора не будет работать с аннотациями данных, так как они должны быть константами на самом деле).Я просто не знаю, как в этом случае.

Любые предложения с радостью приветствуются!


В ответ на вопросы / комментарии:

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

Я пробую внедрение свойств, основанных на отражении (как предложено).В этой конкретной ситуации мне помогает тот факт, что классы аннотаций являются глобальными, поскольку я пытаюсь внедрить экземпляры репозитория - в любом случае, мне нужен только один.

Возможно, именно так я и поступлюинъекции.Однако в моей книге это намного лучше, чем статические классы с их статическими ссылками на репозиторий.

1 Ответ

1 голос
/ 26 октября 2010

Поскольку атрибуты являются метаданными времени компиляции для класса, вы не можете внедрить в них значение во время выполнения, которое повлияет на конкретный экземпляр.

Вы можете использовать отражение, чтобы изменить значение (свойство) атрибута ввремя выполнения, но оно будет глобальным, а не для любого конкретного случая.

...