Как создать экземпляр класса в приложении ASP.NET - PullRequest
5 голосов
/ 08 января 2009

Как вы собираетесь создавать экземпляр объекта, когда ему дается имя класса в виде строки в приложении ASP.NET v2? Например, у меня есть класс SystemLog, определенный в разделе app_code приложения. Класс определяется в пространстве имен отчетов. Чтобы создать экземпляр объекта, я делаю что-то вроде этого:

Dim MyObject As New Global.Reports.SystemLog

Однако я хочу создать этот объект, используя строку для определения типа. Имя типа хранится в базе данных SQL в виде строки. Я думаю, что это, вероятно, что-то делать с Activator.CreateInstance (AssemblyName, TypeName), но я не знаю, что передать в эти строки. Как называется сборка веб-приложения ASP.NET?

Помощь!

Спасибо, Роб.

PS. Я не хочу жестко выбрать оператор Select: -)

Ответы [ 3 ]

5 голосов
/ 08 января 2009
string typeName = "Your Type Name Here";
Type t = Type.GetType(typeName);
object o = Activator.CreateInstance(t);

Это даст вам инстанцированный тип. Если вам нужно, приведите его к правильному типу и вызовите соответствующие методы.

Если вам нужно создать тип, не имеющий конструктора без параметров, существует перегрузка CreateInstance, которая принимает параметры объектов для передачи конструктору. Дополнительная информация по этой статье MSDN .

2 голосов
/ 14 декабря 2009

Следующее может создать тип, даже если он из другой сборки:

public object CreateInstance(string typeName) {
   var type = AppDomain.CurrentDomain.GetAssemblies()
              .SelectMany(a => a.GetTypes())
              .FirstOrDefault(t => t.FullName == typeName);

   return type.CreateInstance();
}
0 голосов
/ 08 января 2009

Вы можете использовать это, чтобы получить его из конкретной сборки:

Сборка сборки = Assembly.Load ("myAssembly");

Тип ObjectType = assembly.GetType («Введите здесь имя»);

затем ..... object o = Activator.CreateInstance (ObjectType);

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