You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prism 6.3升级至8.1技术咨询:替换Bootstrapper与日志实现

Prism 6.3 升级到 8.1 问题解答

1. 用PrismApplication替代Bootstrapper的方向是否正确?

完全正确。Prism 7.0及以上版本已废弃旧的Bootstrapper类,官方明确推荐使用PrismApplication作为WPF应用的启动入口。它整合了原Bootstrapper的核心逻辑,通过重写CreateShell、RegisterTypes、ConfigureModuleCatalog等方法即可完成应用初始化,代码结构更简洁,也符合Prism新版本的设计规范。

2. 集成EnterpriseLibrary.Logging.NetCore到Prism 8.1

实现步骤:

  • 安装EnterpriseLibrary.Logging.NetCore NuGet包
  • 实现Prism日志接口ILoggerFacade的适配器,适配Enterprise Library的日志系统
  • 在Prism容器中注册日志实例和适配器

示例代码:

日志适配器类

using Microsoft.Practices.EnterpriseLibrary.Logging;
using Prism.Logging;
using System.Diagnostics;

public class EnterpriseLibraryLoggerAdapter : ILoggerFacade
{
    private readonly LogWriter _logWriter;

    public EnterpriseLibraryLoggerAdapter(LogWriter logWriter)
    {
        _logWriter = logWriter;
    }

    public void Log(string message, Category category, Priority priority)
    {
        var logEntry = new LogEntry
        {
            Message = message,
            Severity = category switch
            {
                Category.Debug => TraceEventType.Verbose,
                Category.Info => TraceEventType.Information,
                Category.Warn => TraceEventType.Warning,
                Category.Error => TraceEventType.Error,
                Category.Exception => TraceEventType.Critical,
                _ => TraceEventType.Information
            },
            Priority = (int)priority
        };
        _logWriter.Write(logEntry);
    }
}

在PrismApplication中注册日志

using Prism.Ioc;
using Prism.Unity;
using Microsoft.Practices.EnterpriseLibrary.Logging;
using System.Diagnostics;
using System.Windows;

public partial class App : PrismApplication
{
    protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        // 配置Enterprise Library日志
        var loggingConfig = new LoggingConfiguration();
        // 添加控制台监听(可替换为文件、数据库等监听)
        var consoleListener = new ConsoleTraceListener { Name = "ConsoleListener" };
        loggingConfig.AddLogSource("Default", SourceLevels.All, true)
                     .AddTraceListener(consoleListener);
        
        var logWriter = new LogWriter(loggingConfig);
        
        // 注册LogWriter实例
        containerRegistry.RegisterInstance(logWriter);
        // 注册Prism日志适配器,让Prism内部和业务代码共用该日志系统
        containerRegistry.RegisterInstance<ILoggerFacade>(new EnterpriseLibraryLoggerAdapter(logWriter));

        // 其他服务注册
        containerRegistry.Register<IMyBusinessService, MyBusinessService>();
    }

    protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
    {
        // 注册应用模块(如有)
        moduleCatalog.AddModule<YourFeatureModule>();
    }
}

3. Prism 6.3到7.0+的迁移要点及示例

核心迁移点:

  • 启动类替换:将继承Bootstrapper改为继承对应容器的PrismApplication(比如Prism.Unity.PrismApplication)
  • 容器配置方法替换:原ConfigureContainer方法替换为RegisterTypes,使用IContainerRegistry进行服务注册
  • 模块配置:ConfigureModuleCatalog方法保留,用法基本一致,仍可通过moduleCatalog.AddModule添加模块
  • 命名空间调整:部分API的命名空间变更,比如统一使用Prism.Mvvm替换旧的同名命名空间(基本兼容,建议统一更新)

最简迁移后PrismApplication示例

using Prism.Ioc;
using Prism.Unity;
using System.Windows;

namespace YourWpfApp
{
    public partial class App : PrismApplication
    {
        // 创建主窗口,对应原Bootstrapper的CreateShell
        protected override Window CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }

        // 注册服务、视图模型等,对应原ConfigureContainer
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.Register<IDataService, DataService>();
            containerRegistry.RegisterForNavigation<CustomerView, CustomerViewModel>();
        }

        // 配置模块,对应原ConfigureModuleCatalog
        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            moduleCatalog.AddModule<InventoryModule.InventoryModule>();
        }
    }
}

内容的提问来源于stack exchange,提问作者Deepak HN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:10:28