lamar - 如何在 Lamar 5 的 Use(ctx =>{}) 工厂函数中获取请求的类型?
问题描述
我想在我的基类上有一个用于记录器的 setter 属性,这样我就不必经历将记录器传递给所有服务的基本构造函数的繁琐工作。
public abstract class ServiceBase
{
[SetterProperty]
public ILogger Logger { get; set; }
}
public FooService : ServiceBase
{
}
当FooService
被实例化时,我希望将Logger
属性设置为 的实例ILogger<T>
,在这种情况下ILogger<FooService>
。我不想ServiceBase
为了将 a 传递<T>
给属性声明而使我的泛型。以前我在类型注册中实现了这一点(我不记得我使用的是哪个框架,那是几年前的事了。可能是 Ninject,可能是 AutoFac,不确定)。
伪代码看起来像这样(因为我不记得框架)。
For<ILogger>().Use(ctx => {
var factory = ctx.GetInstance<LoggerFactory>();
var logger = factory.CreateLogger(ctx.RequestedType); // <-- this is the secret sauce I'm looking for.
return logger;
});
这在拉马尔可能吗?
我已经在IServiceContext
传递给该Use(ctx)
方法的周围戳了一下,但什么也看不到。
解决方案
推荐阅读
- kotlin - Kotlin:具有扩展功能的应用程序
- c# - 在两个视图上显示相同的弹出窗口
- asp.net-core - 如何按照存储库模式在 Asp.Net Core 5.0 项目上实现 .Net Core Identity?
- python - 在 matplotlib 中设置 Y 轴的字符串值
- c++ - 如何在cin之后新建一个动态数组
- r - 润滑到本月的最后一天
- python - Python Decimal 模块未按预期四舍五入
- spring-boot - 通过 Spring Security 验证从 WSO2 IS 生成的 JWT
- django - 使用 apscheduler 的 Django 后台任务计划?
- javascript - 为什么 boostrap vue 烤面包机会立即消失?