Ich abstrahiere weg NLog. Bisher, was ich habe ...erhalten Sie den Klassennamen, der Ninject Service angefordert
public interface IAppLogger
{
void Info(string message);
void Warn(string message);
void Error(string message, Exception error);
void Fatal(string message);
....// other overload
}
Und eine Implementierung von IAppLogger mit NLog
public class NLogLogger : IAppLogger
{
private readonly NLog.Logger _logger;
public NLogLogger([CallerFilePath] string callerFilePath = "")
{
_logger = NLog.LogManager.GetLogger(callerFilePath);
}
public void Info(string message)
{
_logger.Info(message);
}
public void Warn(string message)
{
_logger.Warn(message);
}
.....// and others
}
und Konsole-Anwendung, die diesen Dienst verwendet
public class Program
{
private static IAppLogger Log { get; set; }
private static void Main()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
Log = kernel.Get<IAppLogger>();
Log.Info("Application Started");
Log.Warn("Developer: Invalid date format");
Log.Error("Divid by zero error", new DivideByZeroException());
Console.WriteLine("\nDone Logging");
Console.ReadLine();
}
}
Und eine Abhängigkeit Injection mit Ninject
public class NinjectConfig : NinjectModule
{
public override void Load()
{
Bind<IAppLogger>().To<NLogLogger>()
.WithConstructorArgument("callerFilePath", GetParentTypeName);
}
private static string GetParentTypeName(IContext context)
{
return context.Request.ParentRequest.Service.FullName;
}
}
so weit so gut. Aber wenn ich die Anwendung ausführe, gibt Ninject immer NULL für context.Request.ParentRequest zurück. Ich versuchte es auch mit context.Request.Target ........ Noch gibt es NULL für context.Request.Target. Was mache ich falsch. Hilf mir bitte!
Check this out ... http://stackoverflow.com/questions/30457623/how-to-get-implementing -type-when-ninject-dependency-resolve – dbugger
@dbugger Also, was ich verstehe von dem Link, den Sie vorgeschlagen, ist, dass ParentContext oder Ziel wird Null, wenn ich Ninject Service durch IResolutionRoot.Get() wie ich oben in der Konsole Anwendung zugegriffen habe . ICH HABS!!. Vielen Dank. –
ash
Aber gibt es eine Möglichkeit, dass eine Klasse, die die Injektion erhält, sich an den Ninject-Dienst unter Verwendung von IResolutionRoot zu benachrichtigen, damit ParentContext nicht null ist – ash