J'ai une classe:instancier une instance d'un assembly spécifié qui hérite d'une classe de base - apparemment problème très difficile
public abstract class SendAgencyFileComponent : ISendAgencyFileComponent
{
public AgencyOutput agencyOutput;
public TDXDataTypes.DB.Entity client;
public TDXDataTypes.DB.Entity agency;
public SendAgencyFileComponent(AgencyOutput agencyOutput, TDXDataTypes.DB.Entity client, TDXDataTypes.DB.Entity agency)
{
this.agencyOutput = agencyOutput;
this.client = client;
this.agency = agency;
}
}
J'ai un certain nombre de classes qui héritent de cette classe, qui résident dans diverses DLL (y compris celui auquel on appelle, mais dans un endroit différent). J'ai besoin d'être capable d'instancier une instance de cette classe à partir de l'emplacement de la DLL et du nom de la classe. Actuellement, je suis en utilisant:
System.Reflection.Assembly assembly =
System.Reflection.Assembly.LoadFrom(
"C:\\Program Files\\RMIS\\" + format.AssemblyName + ".dll");
return assembly.CreateInstance(
format.ClassName,
true,
System.Reflection.BindingFlags.CreateInstance,
null,
new Object[] { agencyOutput, client, agency },
System.Globalization.CultureInfo.CurrentCulture,
null
) as DotNet_WS_Components.ISendAgencyFileComponent;
Mais je continue à obtenir l'erreur:
Constructeur du type 'TDXDataTypes.DotNet_WS_Components.InternationalAgencyFileOut' not found.
Je suis sûr que mes arguments correspondent au constructeur parfaitement, et lors du chargement de la classe du même ensemble en utilisant Activator.CreateInstance, il fonctionne très bien:
System.Runtime.Remoting.ObjectHandle sendFilehandle =
Activator.CreateInstance(
format.AssemblyName,
format.ClassName,
true,
System.Reflection.BindingFlags.CreateInstance,
null,
new Object[] { agencyOutput, client, agency },
System.Globalization.CultureInfo.CurrentCulture,
null,
null);
return (TDXDataTypes.DotNet_WS_Components.ISendAgencyFileComponent)sendFilehandle.Unwrap();
L'exemple particulier, je travaille sur le moment est:
Webservice -> calls TDXDataTypes dll method through referenced DLL -> calls TDXDataTypes dll class (above) using reflection from a different folder
J'ai mis à jour ma réponse. –