内置IOC容器ServiceCollection在.net core6中的使用
.net core6内置了IOC容器ServiceCollection可以直接使用
1、创建IMicrophone接口
1 namespace Business.IServices 2 { 3 public interface IMicrophone 4 { 5 6 } 7 }
2、创建Microphone类
using Business.IServices; namespace Business.Services { public class Microphone : IMicrophone { public Microphone() { Console.WriteLine($"{this.GetType().Name}被构造.."); } } }
3、创建HomeController类
using Business.IServices; using Microsoft.AspNetCore.Mvc; namespace ProjectIOC.Controllers { public class HomeController : Controller { private readonly IMicrophone _microphone; private readonly IMicrophone _microphone2; public HomeController(IMicrophone microphone,IServiceProvider serviceProvider) { this._microphone = microphone; this._microphone2 = serviceProvider.GetService<IMicrophone>(); } public IActionResult Index() { return View(); } } }
4、修改Program.cs类
1 using Business.IServices; 2 using Business.Services; 3 4 var builder = WebApplication.CreateBuilder(args); 5 6 // Add services to the container. 7 //builder.Services.AddRazorPages(); 8 builder.Services.AddControllersWithViews(); 9 #region 注册服务,抽象与具体 10 { 11 builder.Services.AddTransient<IMicrophone, Microphone>(); 12 builder.Services.AddTransient<IPower, Power>(); 13 } 14 #endregion 15 var app = builder.Build(); 16 17 // Configure the HTTP request pipeline. 18 if (!app.Environment.IsDevelopment()) 19 { 20 app.UseExceptionHandler("/Error"); 21 } 22 app.UseStaticFiles(); 23 24 app.UseRouting(); 25 26 app.UseAuthorization(); 27 28 //app.MapRazorPages(); 29 app.MapControllerRoute( 30 name: "default", 31 pattern: "{controller=Home}/{action=Index}/{id?}" 32 ); 33 app.Run();
5、设置断点,启动程序
可以发现在HomeController构造函数里面,_microphone,_microphone2两个实例被自动创建
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!