C#Castle Windsor在使用factory时不注入NLog实例

C#Castle Windsor在使用factory时不注入NLog实例,c#,factory,castle-windsor,nlog,C#,Factory,Castle Windsor,Nlog,问题是,当我使用Windsor.Castle(WC)的LoggingFacility时,当使用自定义工厂类创建类时,ILogger实例仍然是NullLogger实例。在没有自定义工厂的情况下创建实例会将ILogger设置为NLog实例。这些类的实例类型为ICam,并使用唯一名称注册 NLog正在注册为一个日志记录设施 container.AddFacility(m=>m.LogUsing().WithConfig(“NLog.config”); 类定义包含一个NullLogger实例: pub

问题是,当我使用Windsor.Castle(WC)的LoggingFacility时,当使用自定义工厂类创建类时,ILogger实例仍然是NullLogger实例。在没有自定义工厂的情况下创建实例会将ILogger设置为NLog实例。这些类的实例类型为
ICam
,并使用唯一名称注册

NLog正在注册为一个日志记录设施

container.AddFacility(m=>m.LogUsing().WithConfig(“NLog.config”);
类定义包含一个
NullLogger
实例:

public ILogger Log{get;set;}=NullLogger.Instance;
我正在使用这个定制的工厂实现(为了可读性而缩短了位)。它仅重写
GetComponentName
方法以获得正确的名称,以便WC可以创建正确类的实例

公共类CameraTypeFactory:DefaultTypedFactoryComponentSelector
{
受保护的重写字符串GetComponentName(MethodInfo方法,对象[]参数)
{
如果(!(参数?.Length>0))
{
返回“未知”;
}
如果(!(参数[0]是ICameraInfo cameraInfo))
{
返回“未知”;
}
字符串cameraType=Cameranfo.GetValueOrDefault(Cameranfokey.DeviceType,“未知”);
返回相机类型;
}
}
正在将工厂注册为工厂,并使用名称
cameratypename
注册ICam实例。然后使用
ICameraFactory
ICameraFactory工厂一样创建一个实例。Create(cameraInfo)
其中
cameraInfo
实现接口
ICameraInfo

容器
.登记(
组成部分
.对于()
.AsFactory(新的CameraTypeFactory())
)
.登记(
组成部分
.对于()
.由()实施
.命名(“cameratypename”)
);
容器是一个
IWindsorContainer
。ICameraFactory的定义如下:

公共接口ICameraFactory
{
ICam创建(ICameraInfo cameraInfo);
}

它可以工作,我得到了一个正确类的实例,但是没有日志实例,它仍然是一个空日志记录器,尽管所有东西都是使用WC创建的。工厂类是否需要更多重写,或者我是否做了其他错误?

我建议将日志声明放在类定义中,并将实例化放在类的构造函数中。之后,您可以在方法中调用Log.Info()作为示例。