在ABP项目中的WPF(一):添加 WPF 项目到 ABP 框架

引用自:https://anntiz.github.io/2019/06/01/use-abp-with-wpf/

创建 ABP 项目

ASP.NET Boilerplate 网站上创建一个 ASP.NET MVC 5.x 的项目,如下图所示:

将下载后的解决方案解压缩后使用 Visual Studio 2019 打开,并 还原NuGet包

在解决方案中添加WPF项目

Acme.ContosoUniversity.Web 项目上鼠标右键 -> 属性 ,查看项目的 目标框架 的版本

Visual Studio 2019 的解决方案资源管理器中选中解决方案,鼠标右键 -> 添加 -> 新建项目

添加新项目 窗口中选择 WPF应用(.NET Framework) 模板,然后 下一步

配置新项目 窗口中输入 WPF 项目的名称为:Acme.ContosoUniversity.WPF,框架为:.NET Framework 4.6.1 (与前面查看的目标框架版本相同)

为WPF项目添加NuGet包

Acme.ContosoUniversity.WPF 项目上 鼠标右键 -> 管理NuGet程序包, 在打开的 NuGet包管理器 中搜索并添加以下包:

1、Abp

2、Abp.Castle.Log4Net

3、EntityFramework 6.2.0

4、Microsoft.Bcl

5、Microsoft.Bcl.Async

为WPF项目添加引用

Acme.ContosoUniversity.WPF 项目的 引用鼠标右键 -> 添加引用

引用管理器 的左窗格选择 项目, 在右窗格中选中 ApplicationCoreEntityFramework 三个项目,然后 确定

添加 log4net.config 配置文件

Acme.ContosoUniversity.WPF 项目上 鼠标右键 -> 添加 -> 新建项,模板选择 应用程序配置文件,输入文件名为:log4net.config

输入 log4net.config 文件的内容如以下代码所示:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file value="Logs/Logs.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="10000KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
    </layout>
  </appender>
  <root>
    <appender-ref ref="RollingFileAppender" />
    <level value="DEBUG" />
  </root>
</log4net>

添加WPF项目模块类

Acme.ContosoUniversity.WPF 项目上 鼠标右键 -> 添加 -> ,输入类文件名为:ContosoUniversityWPFModule.cs

输入如以下所示代码:

using Abp.Modules;
using System.Reflection;

namespace Acme.ContosoUniversity.WPF
{
    [DependsOn(typeof(ContosoUniversityDataModule), typeof(ContosoUniversityApplicationModule))]
    public class ContosoUniversityWPFModule : AbpModule
    {
        public override void Initialize()
        {
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
            // base.Initialize();
        }
    }
}

编辑 App.xaml.cs 文件

打开文件 App.xaml.cs,修改为如以下所示代码:

using Abp;
using Abp.Castle.Logging.Log4Net;
using Castle.Facilities.Logging;
using System.Windows;

namespace Acme.ContosoUniversity.WPF
{
    /// <summary>
    /// App.xaml 的交互逻辑
    /// </summary>
    public partial class App : Application
    {
        private readonly AbpBootstrapper _bootstrapper;
        private MainWindow _mainWindow;

        public App()
        {
            _bootstrapper = AbpBootstrapper.Create<ContosoUniversityWPFModule>();
            _bootstrapper.IocManager.IocContainer.AddFacility<LoggingFacility>(
                f => f.UseAbpLog4Net().WithConfig("log4net.config"));
        }

        protected override void OnStartup(StartupEventArgs e)
        {
            _bootstrapper.Initialize();
            _mainWindow = _bootstrapper.IocManager.Resolve<MainWindow>();
            _mainWindow.Show();
            // base.OnStartup(e);
        }

        protected override void OnExit(ExitEventArgs e)
        {
            _bootstrapper.IocManager.Release(_mainWindow);
            _bootstrapper.Dispose();
           // base.OnExit(e);
        }
    }
}

编辑 App.xaml 文件

打开 App.xaml 文件,其内容为以下所示代码:

<Application x:Class="Acme.ContosoUniversity.WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Acme.ContosoUniversity.WPF"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
         
    </Application.Resources>
</Application>

将第5行的 StartupUri="MainWindow.xaml" 删除,否则运行程序时会打开两个 MainWindow 窗口。修改后代码如以下所示:

<Application x:Class="Acme.ContosoUniversity.WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Acme.ContosoUniversity.WPF">
    <Application.Resources>
         
    </Application.Resources>
</Application>

修改 MainWindow.xaml.cs 文件

打开 MainWindow.xaml.cs 文件,找到以下行:

public partial class MainWindow : Window

将其修改为如下所示代码,并添加相应的名字空间引用:

public partial class MainWindow : Window, ISingletonDependency

修改后的完整代码,如以下所示:

using Abp.Dependency;
using System.Windows;

namespace Acme.ContosoUniversity.WPF
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window, ISingletonDependency
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

运行WPF程序

Acme.ContosoUniversity.WPF 设为启动项目,并运行。此时出现 未经处理的异常,显示找不到文件 Debug\log4net.config

解决办法:将 log4net.config 复制到 Debug 文件夹后,再次运行即可。

posted on 2019-06-06 09:53  路盟  阅读(1473)  评论(0编辑  收藏  举报

导航