首页 > 解决方案 > 如何在 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)方法的周围戳了一下,但什么也看不到。

标签: lamar

解决方案


推荐阅读