Я отвлекаю NLog. До сих пор, что у меня есть ...получить имя класса, которое запросило услугу Ninject
public interface IAppLogger
{
void Info(string message);
void Warn(string message);
void Error(string message, Exception error);
void Fatal(string message);
....// other overload
}
И реализация IAppLogger с использованием 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
}
И консольное приложение, которое использует эту службу
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();
}
}
И инъекции зависимостей, используя 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;
}
}
пока все хорошо. Но когда я запускаю приложение, Ninject продолжает возвращать NULL для context.Request.ParentRequest. Я также пробовал это с context.Request.Target ........ Еще он возвращает NULL для context.Request.Target. Что я делаю не так. Помогите мне, пожалуйста !!!!
Проверьте это ... http://stackoverflow.com/questions/30457623/how-to-get-implementing -type-in-ninject-dependency-resolve – dbugger
@dbugger Итак, я понял из ссылки, которую вы предположили, что ParentContext или Target будет null, если я обратился к службе Ninject через IResolutionRoot.Get(), как это было в приложении консоли выше , ПОНЯЛ!!. Большое спасибо. –
ash
Но есть ли способ, чтобы класс, который получил инъекцию, чтобы уведомить об этом себя в службу Ninject с помощью IResolutionRoot, чтобы ParentContext не был пустым – ash