【发布时间】:2015-07-27 19:51:32
【问题描述】:
在我的程序中记录某些内容后,我将记录信息存储在 CustomLogger 类中名为 LogItems 的公共字段中。
编辑:我的 CustomLogger 类现在实现了 IMyLogger
public class CustomLogger : IMyLogger
{
// LogItems are stored in this field. Assume that it is not Null.
public ObservableCollection<LogItem> LogItems = new ObservableCollection<LogItem>
public CustomLogger()
{
}
// Other methods that populate the LogItems field
}
IMyLogger 如下:
public interface IMyLogger : ILoggerFacade
{
ObservableCollection<LogItem> LogItems { get; set; }
}
编辑:谁能告诉我如何从 CustomLogger 类中检索 LogItems 对象?我需要 LogItems 才能在我的 viewModel 中显示它。我的 ViewModel 类如下:
[Export]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.Shared)]
public class LoggerViewModel : ViewModelBase
{
public ObservableCollection<LogItem> LogItems { get; set; }
protected static readonly ILog log = LogManager.GetLogger(typeof(LoggerViewModel));
[ImportingConstructor]
public LoggerViewModel(CustomLogger cLogger)
{
// Can anyone tell me why I cannot call LogItems from cLogger here? An activation error is being thrown here.
LogItems = cLogger.LogItems;
}
}
运行代码后,我在尝试获取 LoggerView 类型的实例时出现激活错误,键为“”。
如果我将 LoggerViewModel 构造函数更改为
public LoggerViewModel()
{
}
没有引发错误,但我的视图模型中没有显示任何内容。
如何在我的视图模型中显示日志信息?
【问题讨论】:
-
我没有使用 IOC。如果我把类型改成接口,ILoggerFacade,那我就无法访问CustomLogger类中的LogItems了,对吧?
-
您好,使用 IoC 很方便,您应该考虑使用它。您可以将类型更改为接口,您将拥有访问权限。它可以看起来: publc interface ILoggerFacade { ObservableCollection
LogItems {get;set;} } -
@Jarek,您能否进一步详细说明“将类型更改为接口”的含义? ILoggerFacade 接口来自 Microsoft Prism 库,因此无法修改。
-
接口 IMyLogger : ILoggerFacade { ObservableCollection
LogItems {get;set;} } -
我的CustomLogger应该实现IMyLogger接口吗?
标签: c# .net logging mvvm log4net