是否有文章或完整示例显示如何使用ninject将Log4Net记录器注入控制台应用程序?到目前为止,我已设法在主模块中创建一个新实例,但我无法弄清楚如何注入。以下是我的设置。
编辑:我想我会添加这样做的原因。我想将记录器注入其他类来进行记录。
using System;
using System.Reflection;
using Ninject;
using Ninject.Modules;
namespace SomeNameSpace
{
public class MyProgram
{
public static void Main(string[] args)
{
log4net.Config.BasicConfigurator.Configure();
log4net.ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
try
{
log.Info("Application - Start");
Initialiase();
_something.DoSomething();
log.Info("Application - End");
}
catch (Exception ex)
{
log.Error("Application failed", ex);
}
}
private static void Initialiase()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
_something = kernel.Get<ISomething>();
}
}
public class Bindings : NinjectModule
{
public override void Load()
{
Bind<ISomething>().To<Something>();
}
}
}
答案 0 :(得分:0)
这就是我实现它的方式......
using System;
using System.Reflection;
using Ninject;
using log4net;
namespace SomeNameSpace
{
public class MyProgram
{
private static ILog _log;
public static void Main(string[] args)
{
try
{
Initialiase();
_log.Info("Application - Start");
_something.DoSomething();
_log.Info("Application - End");
}
catch (Exception ex)
{
_log.Error("Application failed", ex);
}
}
private static void Initialiase()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
_log = kernel.Get<ILog>();
_something = kernel.Get<ISomething>();
}
}
public class Bindings : NinjectModule
{
public override void Load()
{
Bind<ILog>().ToMethod(c => LogManager.GetLogger(typeof(Program))).InSingletonScope();
Bind<ISomething>().To<Something>();
}
}
}
现在我可以DI ILog并开始记录。
但是,记录器现在始终具有名称SomeNameSpace.Program。这将使得难以确定从应用程序中写入日志的位置。我能找到的最简单的解决方案是更改Log4Net配置并使用%C代替%logger。
希望这有帮助。