首页 > 编程语言 >WinForm使用IOC控制程序

WinForm使用IOC控制程序

时间:2024-05-12 16:09:24浏览次数:23  
标签:string serviceProvider void 控制程序 loginService services IOC public WinForm

新建WinForm程序
1、添加Nuget包

Microsoft.Extensions.DependencyInjection

2、改变启动项

 internal static class Program
 {
     /// <summary>
     /// 应用程序的主入口点。
     /// </summary>
     [STAThread]
     static void Main()
     {
         //创建服务容器
         var services = new ServiceCollection();
         //添加服务注册
         ConfigureServices(services);
         //先用DI容器生成 serviceProvider, 然后通过 serviceProvider 获取Main Form的注册实例
         var serviceProvider = services.BuildServiceProvider();
         var formMain = serviceProvider.GetRequiredService<MainForm>();   //主动从容器中获取FormMain实例, 这是简洁写法
         // var formMain = (FormMain)serviceProvider.GetService(typeof(FormMain));  //更繁琐的写法
         Application.Run(formMain);
     }
     /// <summary>
     /// 注入服务
     /// </summary>
     /// <param name="services"></param>
     public static void ConfigureServices(IServiceCollection services)
     {
         services.AddSingleton<ILoginService, LoginService>();
         services.AddScoped(typeof(MainForm));
     }
 }

3、随便自定义一个接口和实现

 public interface ILoginService
 {
     void Login(string username, string password);
 }

 public class LoginService : ILoginService
 {
     public void Login(string username, string password)
     {
         MessageBox.Show("登录成功");
     }
 }

4、构造方法注入

 public partial class MainForm : Form
 {
     private readonly ILoginService _loginService;
     public MainForm(ILoginService loginService)
     {
         InitializeComponent();
         _loginService = loginService;
     }

     private void button1_Click(object sender, EventArgs e)
     {
         _loginService.Login("username","password");
     }
 }

标签:string,serviceProvider,void,控制程序,loginService,services,IOC,public,WinForm
From: https://www.cnblogs.com/guchen33/p/18187883

相关文章

  • 在 WinForms 应用程序中处理未经处理的异常
    internalstaticclassProgram{///<summary>///应用程序的主入口点。///</summary>[STAThread]staticvoidMain(){//添加事件处理程序以捕获主UI线程中发生的所有异常Application.......
  • C#winform实现通过点击Button来切换不同的界面
    C#winform实现通过点击Button来切换不同的界面实现目标:点击左边菜单栏里面的Button实现右边区域切换不同界面。步骤:1.界面布局由于实现目标需要用到容器控件,所以需要选择合适的容器控件来进行左右区域布局。常用的容器控件有:Panel,FlowLayoutPanel,GroupBox,TabControl,SplitConta......
  • 用WinForm实现进度条显示
    整体UIbackgroundwork事件它用于在单独的后台线程上执行耗时的操作,而不阻塞UI线程创建backgroundwork//------------------------backgroundworker_Dowork事件------------------------//------------------------(objectsender,EventArgse)具体表......
  • WinForm下实现子窗体
    如果想要实现在同一个Form下的子窗体切换,下面的方法可以实现。窗体设计,如图增加子窗体。鼠标右键项目,选择添加,选择用户控件注意修改用户控件的大小尺寸,和GroupBox的尺寸匹配。建立好子窗体后,在主Form里面先声明各个子窗体类,如下://定义用户窗口变量......
  • 设置Winform窗体内控件跟随窗体大小变化而变化
    点击查看代码#region界面放大处理privatefloatx;//窗体大小全局变量privatefloaty;//窗体大小全局变量#region获取控件的width、height、left、top、字体大小值,存放在控件的Tag属性中privatevoidsetTag(Controlcons){//遍历窗体中的控......
  • C#的基于.net framework的Winform编程 - 编程手把手系列文章
          对于C#,笔者最早接触的是ASP.NET里的开发,后面对Winform程序也有一定的开发,但是真正理解和重新编码是这些年的事,在我的C#标签里有一些例子,记录了winform程序开发的一些功能。此文只是记录基于.netframework的用C#开发Winform程序的一个过程。1、安装VisualStud......
  • Godot.NET C#IOC重构(11):攻击与死亡
    目录前言带上伤害HitboxHurtbox实现效果渐变淡出添加受攻击效果Hurtbox完善Enemy状态机结果剩下的都是逻辑完善的部分了,后面的我就跳过了。前言这次来深刻了解一下Godot中的伤害计算带上伤害我们将之前的Hitbox和HurtBox进行了一下简单的修改HitboxusingGodot;usingSyste......
  • Godot.NET C#IOC重构(9-10):三连击,攻击框
    目录前言AnimationPlayer和AnimatedSprite2D将导出属性添加到关键帧里面。状态机构建核心代码完整代码实现效果碰撞框和受攻击框全局类HitBox:攻击框HurtBox:受击框实现效果添加Player攻击总结前言这篇博客来深入讲解一下Godot中的AnimationPlayerAnimationPlayer和AnimatedSpr......
  • 16_ioctl接口
    ioctl接口structfile_operations{ ...... long(*unlocked_ioctl)(structfile*,unsignedint,unsignedlong); ......};1.什么是unlocked_ioctl接口?​unlocked_ioctl就是ioctl接口,但是功能和对应的系统调用均没有发生变化。2.unlocked_ioctl和read/write函......
  • C# winform 漂亮的日期时间控件
    源代码下载:https://download.csdn.net/download/gaoxiang19820514/89242240效果图在HZH-Controls控件基础上修改的日期控件因为HZH_Controls控件中的日期控件太大了,我的程序中需要多个日期时间的控件放不下,主题是绿色的,所以手动调了一下样式。为了和HZH_Controls同时使......