如何在 Ninject 依赖解析期间获取实现类型?
How to get implementing type during Ninject dependency resolve?
我使用 Log4net 进行日志记录,并且我有很多对象都具有 ILog 依赖项。这些依赖项与其他依赖项一样被注入。我想坚持 Log4net 记录器命名约定,以便注入到实例的记录器以实例的类型命名。我一直在为 ILog 使用以下绑定:
Bind<ILog>().ToMethod(ctx =>
LogManager.GetLogger(ctx.Request.ParentRequest == null ? typeof(object) : ctx.Request.ParentRequest.Service)
);
这违反了命名约定,因为记录器将以接口而不是实现类型命名。
interface IMagic {}
class Magic: IMagic
{
ILog logger; // The logger injected here should have the name "Magic" instead of IMagic
}
我尝试了几种方法从 ctx 获取实现类型,但没有成功。有什么办法可以得到实现类型?
this and that 涵盖了您的问题,但它们并不完全重复,所以我将重新发布:
Bind<ILog>().ToMethod(context =>
LogManager.GetLogger(context.Request.ParentContext.Plan.Type));
所以 context.Request.ParentContext.Plan.Type
是 ILog
注入的类型。如果你想做 IResolutionRoot.Get<ILog>()
那么就没有类型可以注入 ILog
,所以也不会有 ParentContext
。在这种情况下,您需要像以前的解决方案一样进行 null
检查:
Bind<ILog>().ToMethod(context =>
LogManager.GetLogger(context.Request.ParentContext == null ?
typeof(object) :
context.Request.ParentContext.Plan.Type));
我使用 Log4net 进行日志记录,并且我有很多对象都具有 ILog 依赖项。这些依赖项与其他依赖项一样被注入。我想坚持 Log4net 记录器命名约定,以便注入到实例的记录器以实例的类型命名。我一直在为 ILog 使用以下绑定:
Bind<ILog>().ToMethod(ctx =>
LogManager.GetLogger(ctx.Request.ParentRequest == null ? typeof(object) : ctx.Request.ParentRequest.Service)
);
这违反了命名约定,因为记录器将以接口而不是实现类型命名。
interface IMagic {}
class Magic: IMagic
{
ILog logger; // The logger injected here should have the name "Magic" instead of IMagic
}
我尝试了几种方法从 ctx 获取实现类型,但没有成功。有什么办法可以得到实现类型?
this and that 涵盖了您的问题,但它们并不完全重复,所以我将重新发布:
Bind<ILog>().ToMethod(context =>
LogManager.GetLogger(context.Request.ParentContext.Plan.Type));
所以 context.Request.ParentContext.Plan.Type
是 ILog
注入的类型。如果你想做 IResolutionRoot.Get<ILog>()
那么就没有类型可以注入 ILog
,所以也不会有 ParentContext
。在这种情况下,您需要像以前的解决方案一样进行 null
检查:
Bind<ILog>().ToMethod(context =>
LogManager.GetLogger(context.Request.ParentContext == null ?
typeof(object) :
context.Request.ParentContext.Plan.Type));