我有一个名为 ILogger 的接口,它基本上包含一些日志记录方法。
记录器.cs
public interface ILogger
{
void LogError(string message, Exception exception = null);
void LogMessage(string message);
void LogValidationError(UploadResult uploadResult);
void LogValidationError(ValidationResult validationResult);
void LogProcessingError(string processingError);
}
我有一个实现此接口的 LogHelper 类。LogHelper 类通过 StructureMap 实例化,例如
ObjectFactory.Initialize(
request =>
{
request.For<ILogger>().Singleton().Use<LogHelper>();
});
我有很多类的构造函数,我只是实例化这个类并调用方法来记录信息。例如:我有一个类说 Dummy1 在其构造函数中我将 LogHelper 实例化为:
public Dummy1()
{
this.logger = ObjectFactory.GetInstance<ILogger>();
}
在 LogHelper 中,我有一个方法,它基本上创建日志文件并将作为参数传递的消息写入它。
public void LogMessage(string message)
{
using (var writer = this.GetTextWriter(this.messageFilename))
{
writer.WriteLine(message);
}
}
目前,文件名被硬编码为 LogHelper 类的常量属性private string messageFilename = "logs\\UserCreationResult.log"
:
但我希望在实例化 LogHelper 时动态发送文件名。我想拥有一个类属性,并在实例化类时在构造函数中定义该属性。但是由于 LogHelper 类被实例化为ObjectFactory.GetInstance<ILogger>()
. 我无法调用可以传递文件名的构造函数。