Unity с автоматическим впрыском - PullRequest
3 голосов
/ 06 декабря 2010

Я уже сделал следующее:

  1. Зарегистрируйте экземпляр моего регистратора в единстве через интерфейс ILogger.
  2. Создан интерфейс ILoggableObject, который имеет метод Hook(ILogger logger), чтобы внедрить мой регистратор.

Я хотел бы сделать это:

Каждый раз, когда я запрашиваю любое разрешение от единицы, если этот объект реализует ILoggableObject, автоматически вводитьИнтерфейс ILogger через метод Hook.

Я думаю, что это возможно с помощью перехвата или политик?

Любая помощь будет потрясающей.

Ответы [ 3 ]

2 голосов
/ 06 декабря 2010

Что вы ищете, так это TypeInterception в Unity. Смотрите здесь: http://msdn.microsoft.com/en-us/library/ff660861(PandP.20).aspx

Также здесь http://msdn.microsoft.com/en-us/library/ff660848(v=PandP.20).aspx

Вы хотите перехватить вызов конструктора и ввести Logger от имени вызывающего кода, чтобы они не были мудрее.

Хотя я не делал этого раньше, я считаю, что вы можете делать то, что хотите, используя Intercept.NewInstance () http://msdn.microsoft.com/en-us/library/ff662093(PandP.20).aspx

1 голос
/ 06 декабря 2010

Это ужасный способ (попытка) сделать инъекцию зависимости.Вместо этого используйте Constructor Injection и внедрите (через конструктор) ILogger в получателя, который сейчас имеет метод Hook.

0 голосов
/ 06 декабря 2010

Хотя мне действительно нравятся Unity и IoC / DI, я не уверен, что это правильный инструмент для выполнения того, что вы хотите сделать.

Возможно, вы захотите взглянуть на аспектно-ориентированное программирование, используя PostSharp или аналогичный инструмент.Это позволит вам добавить ведение журнала или другие сквозные вопросы без изменения инструментируемых классов.

...