Создание экземпляра класса на основе имени строки интерфейса - PullRequest
3 голосов
/ 27 февраля 2012

У меня есть класс, который реализует подобный интерфейс;

... = new Location<ICafe>();
... = new Location<IBusiness>();
etc

Если я хочу расширить количество типов Location, мне нужно отредактировать код в данный момент.

Есть ли способ, которым я могу создать экземпляр класса на основе строкового имени интерфейса?

Так что я бы взял Cafe или Business из базы данных, и я бы хотел создать экземпляр выше, используя строковые имена интерфейса.

edit

Следует отметить, что я использую ICafe, IBusiness и т. Д., А позже в коде, чтобы определить, что это за элемент и что отображать на экране.

Ответы [ 2 ]

4 голосов
/ 27 февраля 2012

Да, рефлексия позволит вам сделать это, но будет несколько шагов:

2 голосов
/ 27 февраля 2012

Мне кажется, что вы можете извлечь выгоду из того, чтобы быть еще более абстрактным.По какой-то причине у вас не может быть суперинтерфейса с именем:

interface IAbstractLocation 

Затем создайте ваши конкретные классы, используя соответствующий интерфейс, но с теми интерфейсами, которые наследуются от типа AbstractLocation:

interface ICafe : IAbstractLocation

interface IBusiness : IAbstractLocation

Тогда у вас будет 1 тип:

...Location<IAbstractLocation>();

, который должен обрабатывать любой новый тип, который вы можете добавить, который наследует от интерфейса IAbstractLocation.

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