Как создать объект из его Type.GUID - PullRequest
2 голосов
/ 29 марта 2011

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

abstract class Foo
{
   /* ... */
   public static Foo Create(Guid guid) {
      Type type;
      // Resolve the type ?
      return Activator.CreateInstance(type) as Foo;
   }
}

[Guid("<guid1>")]
class Bar : Foo { ... }

[Guid("<guid2>")]
class Baz : Foo { ... }

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

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Это не было бы автоматически, но вы могли бы просто создать Dictionary<Guid,Type> или, если в каждой сборке есть общий интерфейс / класс (аля архитектура плагина), запросить соответствующую регистрацию типов.

Нет необходимости использовать отражение для всего :) Во многих случаях я считаю его менее элегантным.

1 голос
/ 29 марта 2011

Я не думаю, что есть другой способ.Конечно, я бы так и сделал.

...