"10000");
var stu2 = StuService.GetStuInfo("10001");
string msg = $"学号:10000,姓名:{stu1.Name},性别:{stu1.Sex},年龄:{stu1.Age}<br />";
msg += $"学号:10001,姓名:{stu2.Name},性别:{stu2.Sex},年龄:{stu2.Age}";
return Content(msg, "text/html", System.Text.Encoding.UTF8);
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
至此,完成处理,接下来就是见证奇迹的时刻了,我们来访问一下/home/index,看看是否能返回学生信息。
我们可以发现,返回了学生的信息,说明我们注入成功了。
另外通过这个例子我们可以发现在注入仓储层对象StudentRepository时,不仅控制器中注入成功了,而且在服务层中也注入成功了,说明我们ASP.NET Core内置的IoC容器DI依赖注入是全局的。
总结:
1、采用的是构造函数注入的方式,在构造函数中初始化赋值。
2、ASP.NET Core内置的IoC容器DI依赖注入是全局的。
3、DI批量依赖注入的核心思想就是根据程序集的名称通过反射获取类以及类实现的接口键值对字典,然后通过循环进行批量注入。
扩展:DI生命周期
生命周期是依赖注入设计原则里一个非常重要的概念,ASP.NET Core 一共有3种生命周期。
1、暂时(Transient):顾名思义,这种生命周期的对象是暂时的,每次请求都会创建一个新的实例。
services.AddTransient<IStudentRepository, StudentRepository>();
services.AddTransient<IStudentService, StudentService>();
2、作用域(Scoped):每次请求使用的是同一个实例。
services.AddScoped<IStudentRepository, StudentRepository>();
services.AddScoped<IStudentService, StudentService>();
3、单例(Singleton):第一次请求时就创建,以后每次请求都是使用相同的实例。
services.AddSingleton<IStudentRepository, StudentRepository>();
services.AddSingleton<IStudentService, StudentService>();
官方文档建议:依赖注入是静态/全局对象访问模式的替代方法,如果将其与静态对象访问混合使用,则可能无法实现依赖关系注入的优点。
至此,本章就介绍完了,如果你觉得这篇文章对你有所帮助请记得点赞哦,谢谢!!!
demo源码:
链接:https://pan.baidu.com/s/17GIgvp0JWy8BaNOE8l6p9A
提取码:i9hh
参考博文:https://www.cnblogs.com/fei686868/p/11077997.html
版权声明:如有雷同纯属巧合,如有侵权请及时联系本人修改,谢谢!!!