WPF,Prism,Unitybootstrapper和企业库日志记录设置抛出LogWriter异常

时间:2013-03-04 00:58:20

标签: wpf prism unity-container enterprise-library

我只是试着站起来,习惯和Prism一起工作,在我的引导程序中:

public class Bootstrapper : UnityBootstrapper
{

    private readonly EnterpriseLibraryLoggerAdapter _logger =  new EnterpriseLibraryLoggerAdapter();  

    protected override void InitializeShell()
    {
        base.InitializeShell();

        Application.Current.MainWindow = (Shell)this.Shell;
        Application.Current.MainWindow.Show();
    }

    protected override DependencyObject CreateShell()
    {
        return this.Container.Resolve<Shell>();
    }

    protected override ILoggerFacade CreateLogger()
        {
              return _logger; 
        }

我的App OnStartup:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        Bootstrapper bootstrapper = new Bootstrapper();
        bootstrapper.Run();
    }
}

日志适配器

public class EnterpriseLibraryLoggerAdapter : ILoggerFacade
{
    #region ILoggerFacade Members

    public void Log(string message, Category category, Priority priority)
    {
        Logger.Write(message, category.ToString(), (int)priority); // <--Blows up here 
    }

    #endregion
}

当引导程序运行时,它会命中Logger.Write并抛出异常:

The type LogWriter does not have an accessible constructor.

我正在关注StockTraderRI示例应用。我错过了某处的注册吗?

1 个答案:

答案 0 :(得分:0)

将配置移动到我的bootstrapper构造函数,似乎工作正常

 var builder = new ConfigurationSourceBuilder();
        builder.ConfigureLogging()
            .WithOptions
            .DoNotRevertImpersonation()
            .LogToCategoryNamed("Debug")
            .SendTo.FlatFile("Basic Log File")
            .FormatWith(new FormatterBuilder()
                            .TextFormatterNamed("Text Formatter")
                            .UsingTemplate(
                                "Timestamp: {timestamp}{newline}Message: {message}{newline}Category: {category}{newline}"))
            .ToFile("core.log")
            .SendTo.RollingFile("Rolling Log files")
            .RollAfterSize(1024)
            .ToFile("RollingTest.log")
            .LogToCategoryNamed("General")
                .WithOptions.SetAsDefaultCategory()
                .SendTo.SharedListenerNamed("Basic Log File");

        var configSource = new DictionaryConfigurationSource();
        builder.UpdateConfigurationWithReplace(configSource);
        EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);