Sto provando a creare un'app console che carichi un assembly in runtime che implementa un'interfaccia. Il punto è creare una .dll con istruzioni che possono essere cambiate cambiando la .dll.StructureMap: 'AddAllTypesOf' non aggiunge assembly a ObjectFactory?
La mia soluzione VS2012 esiste di 3 progetti: l'interfaccia, una libreria che lo implementa e un'app per console. (Per questo motivo, tutti e tre hanno il loro spazio dei nomi, forse questo è un problema?) La libreria e la console hanno entrambi riferimenti al progetto dell'interfaccia.
Dopo aver aggiunto gli assembly allo ObjectFactory
, non si trovano quando si utilizza GetAllInstances
. Si trovano quando si utilizza AssembliesFromPath
, ma l'aggiunta non sembra funzionare.
Ecco il mio codice:
var dir = "..\\..\\..\\ComputeLibrary\\bin\\Debug";
ObjectFactory.Initialize(cfg =>
{
cfg.Scan(scanner =>
{
scanner.AssembliesFromPath(dir);
scanner.AddAllTypesOf(typeof(ICompute)).NameBy(i => i.Name);
});
});
var list = ObjectFactory.GetAllInstances<ICompute>().ToList();
list.ForEach(item => item.Test());
Nel caso qualcuno voglia di guardare l'intera soluzione, è disponibile here.
Probabilmente sto facendo qualcosa di sbagliato qui, ma non riesco a trovare quello che è. È così che dovrebbe essere usato? O dovrei guardare verso MEF per fare qualcosa del genere?
Secondo la documentazione il tuo codice sembra essere in linea con quanto previsto. L'hai eseguito nel debugger con un punto di interruzione e verificato che l'istanza dello scanner ha l'assembly previsto dopo 'scanner.AssembliesFromPath (dir);' viene eseguita la riga? – cfeduke
Sì, dopo aver eseguito quella linea, lo scanner contiene 2 gruppi: l'interfaccia e la libreria, mentre prima ci sono 0. [screenshot] (http://i.imgur.com/Z0znR0Y.png) – Yves
Cosa succede se eliminare il '.NameBy'? Mi chiedo se forse c'è un'eccezione che viene ingoiata che impedisce alle classi di essere aggiunte allo scanner. – cfeduke