WinForm使用IOC控制程序
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("uname","pwd"); } }
浙公網安備 33010602011771號