Пользовательский параметр Атрибут System.Type - PullRequest
1 голос
/ 19 февраля 2012

Я хочу автоматически зарегистрировать общие / простые сервисы в моем контейнере Unity. Я думаю, что самый чистый способ сделать это - использовать пользовательский атрибут.

Затем я могу проверить все (абстрактные) классы в сборке и зарегистрировать эти типы с единицей.

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

например:

Public Class AutoRegisterAttribute
    Public Property ForInterface As System.Type

    Public Sub New(ForInterface As System.Type)
        Me.ForInterface = ForInterface
    End Sub

    ...

End Class

И класс будет использовать его следующим образом

<AutoRegister(ForInterface:=Stratego.Interfaces.IEngine)>
Public Class StrategoEngine
    Implements IEngine
    Implements IDisposable

    ...

End Class

Обратите внимание, я не просто хочу найти класс, который он реализует, как показано с IDisposable

Я пытался сделать это, используя обобщенные значения (обобщенные значения не наследуются от Attribute), с параметром типа (передача в IEngine.GetType приводит к «Требуется постоянное выражение»)

Возможно ли это? Если да, то как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 19 февраля 2012

Возможно, вам просто нужно написать:

<AutoRegister(ForInterface := GetType(Stratego.Interfaces.IEngine))>
0 голосов
/ 19 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...