Предположим, у меня есть фабричный метод, который хочет создать экземпляр типа, выбранного во время выполнения с помощью отражения. Предположим далее, что мой метод фабрики является общим кодом, который не ссылается непосредственно на сборку, содержащую указанный тип, хотя он будет запускаться из приложения, на которое ссылается необходимая сборка.
Как мне написать код, который может найти этот тип? Если я сделаю следующее
public object CreateInstance(string typeName)
{
Type desiredType = Assembly.GetExecutingAssembly().GetType(typename);
// Instantiate the type...
}
это похоже на ошибку, потому что тип не определен в исполняемой сборке. Если бы я мог получить все сборки, доступные во время выполнения, я мог бы перебрать их и найти, какая из них содержит нужный мне тип. Но я не вижу способа сделать это. AppDomain.CurrentDomain.GetAssemblies()
выглядит многообещающе, но не возвращает все сборки, на которые я ссылался в моем проекте.
Редактировать : Несколько человек указали, что мне нужно загрузить сборку. Проблема в том, что этот фрагмент кода не знает, какую сборку он должен загрузить, поскольку я пытаюсь написать этот код таким образом, чтобы он не зависел от других сборок.
Я сознательно пропустил детали typeName
, поскольку отображение из строки в тип в моем реальном коде на самом деле более сложное. На самом деле, тип определяется пользовательским атрибутом, который содержит указанную строку, но если я смогу получить список типов, у меня нет проблем с ограничением списка требуемым типом.