首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用工厂时,C#城堡Windsor不会注入NLog实例

使用工厂时,C#城堡Windsor不会注入NLog实例
EN

Stack Overflow用户
提问于 2020-10-27 17:03:01
回答 1查看 78关注 0票数 0

问题是,当我使用LoggingFacility of Windsor.Castle (WC)时,ILogger实例仍然是一个NullLogger实例,而该类是使用自定义工厂类创建的。创建没有自定义工厂的实例会将ILogger设置为NLog实例。类的实例属于ICam类型,并使用唯一的名称进行注册。

NLog正在注册为日志记录工具

代码语言:javascript
运行
复制
container.AddFacility<LoggingFacility>(m => m.LogUsing<NLogFactory>().WithConfig("NLog.config"));

类定义包含一个NullLogger实例:

代码语言:javascript
运行
复制
public ILogger Log { get; set; } = NullLogger.Instance;

我使用的是这个定制的工厂实现(为了可读性而略短了一点)。它只会重写GetComponentName方法来获取正确的名称,这样WC就可以创建正确类的实例。

代码语言:javascript
运行
复制
public class CameraTypeFactory : DefaultTypedFactoryComponentSelector
    {
        protected override string GetComponentName(MethodInfo method, object[] arguments)
        {
            if (!(arguments?.Length > 0))
            {
                return "Unknown";
            }

            if (!(arguments[0] is ICameraInfo cameraInfo))
            {
                return "Unknown";
            }

            string cameraType = cameraInfo.GetValueOrDefault(CameraInfoKey.DeviceType, "Unknown");

            return cameraType;
        }
    }

该工厂正在注册为工厂,并且使用名称cameratypename注册了一个ICam实例。然后使用类似ICameraFactory factory.Create(cameraInfo)ICameraFactory创建一个实例,其中cameraInfo实现接口ICameraInfo

代码语言:javascript
运行
复制
container
    .Register(
        Component
            .For<ICameraFactory>()
            .AsFactory(new CameraTypeFactory())
    )
    .Register(
        Component
            .For<ICam>()
            .ImplementedBy<Camera>()
            .Named("cameratypename")
    );

容器是一个IWindsorContainer。ICameraFactory定义为:

代码语言:javascript
运行
复制
public interface ICameraFactory
{
    ICam Create(ICameraInfo cameraInfo);
}

它工作了,我得到了一个正确类的实例,但是没有日志记录实例,它仍然是一个NullLogger,尽管所有的东西都是使用WC创建的。是工厂类需要更多重写,还是我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-10-27 17:58:42

我建议将Log的声明放在类定义中,并将实例化放在类的构造函数中。之后,您可以在您的方法中调用例如Log.Info()。https://github.com/NLog/NLog/wiki/Getting-started-with-.NET-Core-2---Console-application

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64551092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档