Какую функцию перегрузки Activator.CreateInstance вызывать? - PullRequest
0 голосов
/ 24 марта 2010

Какую функцию перегрузки Activator.CreateInstance вызывать? У меня есть тип, возвращенный из "Тип proxyType = GetProxyType (contractType);" и информация конструктора

"[System.Reflection.RuntimeConstructorInfo] = {Void .ctor (System.ServiceModel.InstanceContext)} base {System.Reflection.MemberInfo} = {Void .ctor (System.ServiceModel.InstanceContext)}

[System.Reflection.RuntimeConstructorInfo] = {Void .ctor (System.ServiceModel.InstanceContext, System.String)} base {System.Reflection.MethodBase} = {Void .ctor (System.ServiceModel.InstanceContext, System.String)}

[System.Reflection.RuntimeConstructorInfo] = {Void .ctor (System.ServiceModel.InstanceContext, System.String, System.String)} base {System.Reflection.MethodBase} = {Void .ctor (System.ServiceModel.InstanceContext, System.String, System.String)}

[System.Reflection.RuntimeConstructorInfo] = {Void .ctor (System.ServiceModel.InstanceContext, System.String, System.ServiceModel.EndpointAddress)} base {System.Reflection.MethodBase} = {Void .ctor (System.ServiceModel.InstanceContext, System.String, System.ServiceModel.EndpointAddress)}

[System.Reflection.RuntimeConstructorInfo] = {Void .ctor (System.ServiceModel.InstanceContext, System.ServiceModel.Channels.Binding, System.ServiceModel.EndpointAddress)} base {System.Reflection.MethodBase} = {Void .ctor (System.ServiceModel.InstanceContext, System.ServiceModel.Channels.Binding, System.ServiceModel.EndpointAddress)}.

Спасибо !!

1 Ответ

0 голосов
/ 24 марта 2010

Кажется, у типа есть конструктор по умолчанию, поэтому Activator.CreateInstance(proxyType); должен работать. Если вы хотите вызвать какой-нибудь другой конструктор, например тот, который принимает строковый параметр, вы можете сделать это:

var instance = Activator.CreateInstance(proxyType, "some string parameter");

или с двумя строковыми параметрами:

var instance = Activator.CreateInstance(proxyType, "param1", "param2");

UPDATE:

Моя ошибка: для этого типа не определен конструктор без параметров. Всем конструкторам нужен как минимум один аргумент типа InstanceContext . Таким образом, чтобы создать экземпляр этого типа, вам нужно будет передать хотя бы контекст экземпляра. Например, если вы находитесь в WCF, вы можете попробовать это:

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