ho una classe di interfaccia:Ninject legano tutte le classi che implementano la stessa interfaccia
public interface IStartUpTask
{
bool IsEnabled { get; }
void Configure();
}
Ho classi multimple di attuazione della stessa interfaccia
Una delle classi si presenta così:
public class Log4NetStartUpTask : IStartUpTask
{
public bool IsEnabled { get { return true; } }
public void Configure()
{
string log4netConfigFilePath = ConfigurationManager.AppSettings["log4netConfigFilePath"];
if (log4netConfigFilePath == null)
throw new Exception("log4netConfigFilePath configuration is missing");
if (File.Exists(log4netConfigFilePath) == false)
throw new Exception("Log4Net configuration file was not found");
log4net.Config.XmlConfigurator.Configure(
new System.IO.FileInfo(log4netConfigFilePath));
}
}
Come posso dire a Ninject che voglio che tutte le classi implementino lo IStartUpTask
per collegarsi automaticamente a se stessi?
Ho trovato un esempio utilizzando StructureMap che esegue questa operazione, ma non so come farlo in Ninject.
Scan(x => {
x.AssemblyContainingType<IStartUpTask>();
x.AddAllTypesOf<IStartUpTask>();
x.WithDefaultConventions();
});
Questo tipo di ha funzionato per me, ma dovevo fare "BindSingleInterface" e non BindToSelf. Ma non importa, il trucco per me era il bit "InheritedFrom". Grazie! – noocyte
Ho trovato questa soluzione, ma in qualche modo "non ha funzionato" per me. Mi ci è voluto un po 'per capire perché, quindi lo aggiungo qui per aggiungere più contesto. Per impostazione predefinita, Ninject associa solo le classi pubbliche, è necessario chiamare il metodo 'IncludingNonePublicTypes()' se si desidera associare le classi interne. – mivra