Как получить все реализации интерфейса с помощью отражения? - PullRequest
2 голосов
/ 25 июля 2011
Public interface IRuleObject {}

Public class RuleBase : IRuleObject {}

Public class Length : RuleBase {}

Public class Range : RuleBase {}

Public class SetDefault : IRuleObject {}

Я пытаюсь написать кусок кода, в котором я могу получить все классы, которые реализуют IRuleObject ...

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

Я пытался:

Assembly dll = Assembly.GetAssembly(typeof(IRuleObject));
var rules = dll.GetTypes().Where(x => x.IsAssignableFrom(typeof(IRuleObject)));

Однако не удалось получить Правила
идеи ценятся: -)
спасибо

1 Ответ

3 голосов
/ 25 июля 2011

Я думаю, что вы только что получили IsAssignableFrom неправильно.Попробуйте:

var rules = dll.GetTypes()
               .Where(x => typeof(IRuleObject).IsAssignableFrom(x));

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

...