Si se trata de internal
a una asamblea que no es el suyo y el constructor se marca como private
, el autor de la asamblea está haciendo un gran esfuerzo para evitar que crees el objeto.
Lo que sigue es realmente malo ya que se basa en clases y métodos no públicos que pueden cambiar sin previo aviso.
Added: System.ServiceModel.Channels.SelfSignedCertificate
is the internal
class I am trying to use
No haga esto. El marco podría cambiar debajo de usted en un abrir y cerrar de ojos arruinando su código y todo su trabajo duro.
Dicho esto, usted puede hacer esto:
MethodInfo method = Type.GetType(assemblyQualifiedName).GetMethod("Create");
ABC o = (ABC)method.Invoke(null, new[] { "test" });
Esto invoca el método static
Create
. Otra opción es
MethodInfo method = Type.GetType(assemblyQualifiedName).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new[] { typeof(string) },
null
);
ABC o = (ABC)method.Invoke(new[] { "test" });
que utiliza la reflexión para cargar el constructor que acepta un string
como parámetro.
Una manera fácil de obtener el nombre de ensamblado cualificado es
string name = typeof(somePublicType).Assembly.GetType("Namespace.ABC");
donde somePublicType
es un tipo que es público y en el mismo conjunto ABC
.
¿Desea llamar al constructor privado o llamar al método estático Create? –
Es una clase interna en el marco con la estructura anterior. Me gustaría crear una instancia de la clase usando constructor/método estático y luego usar MethodInfo para usar los métodos en la clase. objeto mc = assembly.CreateInstance (---- <- incapaz de usarlo ya que tiene constructor privado MethodInfo mi = type1.GetMethod ("MyMethod", bf); – sunny