zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

Winform 如何使用Abp

2023-04-18 12:28:34 时间

Winform 如何使用Abp

安装 Volo.Abp.Core

Install-Package Volo.Abp.Core -Version 4.4.4

创建模块和应用

// 创建模块(具体用途暂时不管)
// 一个继承自 AbpModule 的类
public class AppModule : AbpModule
{

}
// 使用 AbpApplicationFactory 创建一个应用
var app = AbpApplicationFactory.Create<AppModule>();
 
// 初始化应用
app.Initialize();

使用应用中的 ServiceProvider 获取服务从而实现依赖注入

初始化app之后,就可以使用app的依赖注入功能了,下面是默认的 Program.cs

internal static class Program
{
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

这里演示直接在第一个窗体实例化就换成从容器中获取,下面代码更改了form实例化的方式。但是暂时是不能够获取到服务的,因为IoC容器里暂时没有 Form1, 所以无法替我们完成实例化。

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
    // 使用 AbpApplicationFactory 创建一个应用
    var app = AbpApplicationFactory.Create<AppModule>();
    // 初始化应用
    app.Initialize();

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    // var form = new Form1();
    var form = app.ServiceProvider.GetService<Form1>();

    Application.Run(form);
}

把需要实例化的服务注册到IoC容器的方式

  1. app.Initialize(); 执行之前给 app.Services 添加。(这里有 AddSingleton() AddTransient() AddScoped())
  2. AppModule 内重写 ConfigureService 方法,给 context.Services 添加。(这里有 AddSingleton() AddTransient() AddScoped())
  3. 在具体的实现类里面加上特性 ITransientDependency。(这里有 ITransientDependency IScopedDependency ISingletonDependency)
// 这里使用最简单的方式,添加一个接口标识
public partial class Form1 : Form, ISingletonDependency
{
    public Form1()
    {
        InitializeComponent();
    }