Использование Activator.CreateInstance для создания экземпляра класса и внедрения интерфейса в конструктор - PullRequest
0 голосов
/ 16 мая 2019

Моя цель - создать экземпляр класса из его AssemblyQualifiedName. Проблема в том, что этот класс требует передачи интерфейса в своем конструкторе, и у меня возникают проблемы с этим с Activator.CreateInstance.

Заранее спасибо за помощь.

Когда у меня есть AssemblyQualifiedName класса, который я хочу создать, я получил его тип, используя Type.GetType (AQN), использовал этот тип, чтобы найти конструктор и получить необходимые параметры.

Я застреваю при вызове Activator.CreateInstance и передаче параметров.


var objectType = Type.GetType(AQN);

var constructors = objectType.GetConstructors();

foreach (ConstructorInfo constructor in constructors)
{
    var parameters = constructor.GetParameters();                   
    var instantiatedObj = Activator.CreateInstance(objectType,parameters);
}

Как только я это сделаю, я получаю сообщение об ошибке «Конструктор типа xxx не найден».

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

если вы хотите создать экземпляр класса динамически, то вы можете сделать это так же

        Type type = Type.GetType(AQN);
        PropertyInfo[] properties = type.GetProperties();
        var instance = (BaseClass)Activator.CreateInstance(type);

        for (int i = 0; i < properties.Length; i++)
        {
            PropertyInfo propertyInfo = type.GetProperty(properties[i].Name);
            var propertyVal = Convert.ChangeType(yourpropertyvalue,  
                             properties[i].PropertyType);
            propertyInfo.SetValue(instance, propertyVal);
        }
        return instance;  
0 голосов
/ 16 мая 2019

Существует Activator.CreateInstance , который просто принимает тип и параметры для передачи. Так что вы можете просто сказать:

ISomeInterface something = null;

var objectType = Type.GetType(AQN);
var instance = Activator.CreateInstance(objectType, something);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...