Ich versuche, eine Methodenfactory zu erstellen, die innerhalb der Konfiguration sucht, um den vollständigen Namen des Typs zu erhalten, der instanziiert wird, und diesen Objekttyp dynamisch erstellt.Fehler beim dynamischen Erstellen des Typs
Hier mein Typ ist und die Schnittstelle:
public interface IComponent<T>
{
IEnumerable<T> DataSource {get; set;}
void PerformTask(object executionContext);
}
namespace MyCompany.Components
{
public class ConcreteComponent1<T> : IComponent<T>
{
private IEnumerable<Contact> contactSource = null;
internal ConcreteComponent1() {}
public void PerformTask(object executionContext)
{
this.contactSource = GetSource(executionContext);
foreach(var result in this.contactSource)
{
result.Execute(executionContext);
}
}
public IEnumerable<T> DataSource
{
get { return this.contactSource as IEnumerable<T>; }
set { this.contactSource = (IContactSource)value; }
}
}
}
Fabrik, befindet sich in der gleichen Baugruppe:
//Factory - Same assembly
public static class ComponentFactory<T>
{
public static IComponent<T> CreateComponent()
{
var assembly = Assembly.GetExecutingAssembly();
object o = assembly.CreateInstance("MyCompany.Components.ConcreteComponent1"); //o is null...
var objectHandle = Activator.CreateInstance(Assembly.GetAssembl(typeof(ComponentFactory<T>)).GetName().FullName, "MyCompany.Components.ConcreteComponent1"); //throws Could not load type from assembly exception.
return o as IComponent<T>;
}
}
So in erster Fall der o immer null ist.
Im zweiten Fall, wenn die Activator-Klasse verwendet wird, kann der Typ Type nicht aus der Assembly "MyAssembly" geladen werden. Keine innere Ausnahme. Was mache ich falsch?
toll - danke für den Tipp. Eine Sache jedoch - den Bauunternehmer öffentlich zu machen, wird hier den ganzen Zweck der Fabrik besiegen. – dexter
@Max Malygin überprüfen Sie die Bearbeitung, müssen Sie einige weitere Parameter hinzufügen, um 'interne' ctor – Andrey
Ok, dachte, es muss ein Weg sein. – dexter