2013-03-21 2 views
1
object[] parame = new object[1]; 
parameters[0] = param1; 

ConstructorInfo[] info = type.GetConstructors(); 
info[0].Invoke(parame); 

obj= Activator.CreateInstance(type, parameters); 

Это дает мне ошибку, поскольку ctor не найден, потому что ctor принимает интерфейс в качестве параметра.Как создать экземпляр класса, который принимает интерфейс в качестве параметра своего конструктора, используя отражение?

Как создать экземпляр этого объекта сейчас?

public Controller(ICustomInterface custom) 
     { 
      _custom= custom; 
     } 

Я пытался вызвать CTOR с теми же парами, и он говорит объект этого класса не может быть преобразован в типе интерфейса. Хотя этот класс реализует этот интерфейс.

+0

Каков ваш класс? Параметры –

+1

должны быть объектом класса, который реализует интерфейс. в вашем случае параметр - это просто объект, который является проблемой. – Falaque

+0

Я пробовал с этим. Я передал параметр как объект, реализующий этот интерфейс. Но все же покажите эту ошибку. – Virus

ответ

2

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

class CustomClass : ICustomInterface {} 

просто называют Activator, как

var obj = Activator.CreateInstance(typeof(Controller), new CustomClass()); 

Это возвращает правильный экземпляр Contoller, с new CustomClass() передается как аргумент конструктора

+0

Это полностью работает спасибо Илья – Dmitry

Смежные вопросы