ich eine Schnittstelle Klasse:ninject alle Klassen binden die gleiche Schnittstelle implementieren
public interface IStartUpTask
{
bool IsEnabled { get; }
void Configure();
}
I multimple Klassen die gleiche Schnittstelle
Eine der Klassen sieht wie folgt aus der Umsetzung:
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));
}
}
Wie kann ich Ninject sagen, dass ich möchte, dass alle Klassen, die IStartUpTask
implementieren, automatisch an sich binden?
Ich habe ein Beispiel mit Structuremap gefunden, das dies tut, aber ich weiß nicht, wie man es in Ninject macht.
Scan(x => {
x.AssemblyContainingType<IStartUpTask>();
x.AddAllTypesOf<IStartUpTask>();
x.WithDefaultConventions();
});
Diese Art von arbeitete für mich, aber ich musste 'BindSingleInterface' tun und nicht BindToSelf. Aber egal, der Trick für mich waren die 'InheritedFrom'-Bits. Danke! – noocyte
Ich fand diese Lösung, aber es hat irgendwie "nicht funktioniert" für mich. Es hat eine Weile gedauert, bis ich herausgefunden habe, warum. Daher füge ich es hier hinzu, um mehr Kontext hinzuzufügen. Standardmäßig bindet Ninject nur öffentliche Klassen, Sie müssen 'IncludeNonePublicTypes()' Methode aufrufen, wenn Sie interne Klassen binden wollen. – mivra