È possibile boostrap un sistema di moduli Prism all'interno del servizio WCF? Perché non importa quello che faccio, le mie dipendenze del MEF non vengono soddisfatte.Sistema di moduli prisma dal servizio WCF?
Esempio:
Questo è il mio servizio WCF implementazione
public class MyService : IMyServiceContract{
// This should get filled by MEF after Prism loads the required modules
[Import]
IDatabase db;
public MyService(){
var bootsrapper = new MyServiceBoostrapper();
bootsrapper.Run();
}
}
Questo è il mio Prism boostrapper di sapore MEF:
public class MyServiceBoostrapper : MefBootstrapper
{
protected override void ConfigureContainer()
{
base.ConfigureContainer();
}
protected override IModuleCatalog CreateModuleCatalog()
{
return new ConfigurationModuleCatalog();
}
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
// TODO: Add this assembly ... don't know why
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(MyServiceBoostrapper).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(IDatabase).Assembly));
// This is what provides the service
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(DatabaseImpl).Assembly));
}
protected override DependencyObject CreateShell()
{
// we don't need the shell
return null;
}
}
Ecco il mio moduloche contiene lo interfacce per database del servizio Prism:
[ModuleExport(typeof(IDatabase))]
public class ModuleActivator : IModule
{
public void Initialize()
{
// Do nothing as this module simply provides the API.
}
}
public interface IDatabase
{
// interface methods here ...
}
e, infine, ecco il Prism servizio di database stesso:
[ModuleExport(typeof(DatabaseImpl), DependsOnModuleNames = new string[] { "IDatabase" })]
public class ModuleActivator : IModule
{
public void Initialize()
{
// Do nothing as this is a library module.
}
}
[Export(typeof(IDatabase))]
public class DatabaseImpl : IDatabase
{
/// implementation here ...
}
provato questo per le ultime ore senza successo. L'importazione del mio db
è sempre null
e non viene mai inizializzata.
Nota che tutto funziona se faccio tutto questo senza Prism, ma solo con MEF.
Quindi, per quanto riguarda i progressi su questo problema? –
Penso di aver trovato una soluzione nel libro "Dependency Injection in .NET" (Parte 3, Cap. 7.3). Ancora provandolo. Fondamentalmente si tratta solo di aggancio alla routine di avvio della WCF. – drozzy
Come ho detto nel mio commento. Penso davvero che sia un problema nella configurazione del contenitore e nella registrazione dei tipi ... –