2016-10-26 4 views
3

В моем классе нет конструктора без параметров по умолчанию. Он имеет такой конструктор вместо:Как передать параметры конструктора в AppDomain.CreateInstanceXXX?

public Section(string fileName) {...} 

Я должен создать экземпляр моего класса внутри некоторого AppDomain. Если мой класс имел конструктор по умолчанию, то я хотел бы сделать это следующим образом:

AppDomain domain = AppDomain.CreateDomain("ACAD-0001:409"); 

ISection section = (ISection)domain.CreateInstanceAndUnwrap(
    typeof(Section).Assembly.FullName, typeof(Section).FullName); 

Но нет конструктора по умолчанию. Как передать параметры моего конструктора?

Я ожидал, что это что-то вроде этого: работа

string cuiFile = "..."; 
ISection section = (ISection)domain.CreateInstanceAndUnwrap(
    typeof(Section).Assembly.FullName, 
    typeof(Section).FullName, 
    new object[] { cuiFile }); 

Но это не работает.

+1

Вам необходимо [эта перегрузка] (https://msdn.microsoft.com/en-us/library/dd414842 (v = vs.110) .aspx) , – Amy

+0

https://msdn.microsoft.com/pl-pl/library/dd414842(v=vs.110).aspx - обратите внимание, что существует TWO-объект [] - один из них - ARGS, а другой - атрибуты – quetzalcoatl

+0

@Amy , Спасибо! Проблема решена. –

ответ

4

Вы должны использовать this overload:

public object CreateInstanceAndUnwrap(
    string assemblyName, 
    string typeName, 
    bool ignoreCase, 
    BindingFlags bindingAttr, 
    Binder binder, 
    object[] args,   // <-- args go here 
    CultureInfo culture, 
    object[] activationAttributes 
) 
Смежные вопросы