当前位置: 首页 > news >正文

图片站手机网站怎么做的中国世界排名前200的大学

图片站手机网站怎么做的,中国世界排名前200的大学,怎么建设网站最便宜,学设计哪个网站好一、什么是依赖注入首先在Asp.net core中是支持依赖注入软件设计模式#xff0c;或者说依赖注入是asp.net core的核心#xff1b;依赖注入#xff08;DI#xff09;和控制反转#xff08;IOC#xff09;基本是一个意思#xff0c;因为说起来谁都离不开谁#xff1b;或者… 一、什么是依赖注入首先在Asp.net core中是支持依赖注入软件设计模式或者说依赖注入是asp.net core的核心依赖注入DI和控制反转IOC基本是一个意思因为说起来谁都离不开谁或者可以说他们是同一个概念的不同角度描述软件设计原则中有一个依赖倒置原则DIP就是为了解耦高层模块不应该依赖于底层模块。二者都应该依赖于抽象抽象不应该依赖于细节细节应该依赖于抽象而依赖注入是实现这种原则的方式之一举个现实中例子小明去行政领一节5号电池然后行政给了小明一节黑象牌5号电池来分析 小明只需要向行政领一节5号电池即可小明不需要关心什么牌子的电池电池从哪来的电池的价格等等。他们俩共同需要关心的是一节5号电池即可即使后期行政给了小明北孚电池小明仍可以正常使用他们只需要满足一个规则5号电池即可小明高层模块不应该依赖黑象牌电池低层模块两者应该都依赖5号电池抽象。如果小明直接获取到new黑象牌电池如果后期业务变更提供的是北孚电池那么我们就需要更改小明的代码再如果公司有几百个小明代码量可想而知为了解决直接获取new黑象牌电池简单说为了解耦我们让每位员工通过行政领取构造函数属性方法等这种即使更改其他品牌而小明压根不需要关心举个.Net core中的例子.Net core中使用分布式缓存我们只需要在构造函数中获取IDistributedCache然后就可以在方法中直接使用缓存我们不需要关心缓存的实现方式存储位置等等如果缓存从内存变成Redis或者sqlserver甚至自己实现缓存而我们只需要在ConfigureServices中更改具体实现方式即可而不需要更改任何使用缓存的地方 二、Asp.net core中依赖注入的生命周期依赖注入的生命周期有三种TransientScoped和Singleton1、Transient每次调用都是不同的实例比如常用的Microsoft.Extensions.Options.IConfigureOptionsT2、Scoped每次请求是同一个实例如 Entity Framework contexts3、Singleton只有一个实例如Microsoft.Extensions.Logging.ILoggerT具体使用哪种要根据具体情况而定1、比如我们一般的业务逻辑都是Transient这个也是比较常用的2、Scoped相对用的比较少当然也有很多业务逻辑也有用Scoped的当然他的妙用肯定是每次请求一个实例比如我们在系统中获取登录系统用户的Id这时就可以用Scoped不管在Service层或者Repository层等等获取的都是同一个用户3、Singleton很多都是系统级别设计用单利比如日志三、在Asp.net core中使用依赖注入基础业务逻辑代码获取用户列表public interface IUserInfoService { IEnumerableUserInfo GetUserInfo(); }public class UserInfoService : IUserInfoService {public IEnumerableUserInfo GetUserInfo() {// 模拟db获取数据return new ListUserInfo { new UserInfo { Id 1, Name Emrys }, new UserInfo { Id 2, Name 梅林 } }; } }public class UserInfoMongoService : IUserInfoService {public IEnumerableUserInfo GetUserInfo() {// 模拟Mongodb获取数据return new ListUserInfo { new UserInfo { Id 1, Name Emrys }, new UserInfo { Id 2, Name 梅林 } }; } }public class UserInfo {public int Id { get; set; }public string Name { get; set; } }1、传统方式 public class ValuesController : ControllerBase { IUserInfoService _userInfoService new UserInfoService(); [HttpGet] [HttpGet]public IEnumerableUserInfo Get() {return _userInfoService.GetUserInfo(); } }在传统方式中获取用户的服务类直接用new的方式这也是很多初学者或者很多老手最经常使用的方式从中可以发现代码耦合度太高非常不利于维护在所有使用到IUserInfoService的地方都要new出对象如果后期需求变更需要替换IUserInfoService的实现比如从Mongodb中获取数据现实示例中从黑象牌变成北孚电池那么就需要在所有new出UserInfoService的地方更改代码换成UserInfoMongoServiceIUserInfoService _userInfoService new UserInfoMongoService()我们如果需要new的对象需要实现单例模式(Singleton)每次请求new一个对象Scoped模式那么还要另写代码实现 2、依赖注入方式1、在Startup类的ConfigureServices方法中设置注入public void ConfigureServices(IServiceCollection services){ services.AddTransientIUserInfoService, UserInfoService(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);} 2、在构造函数中获取实例public class ValuesController : ControllerBase{ IUserInfoService _userInfoService;public ValuesController(IUserInfoService userInfoService) { _userInfoService userInfoService; } [HttpGet]public IEnumerableUserInfo Get() {return _userInfoService.GetUserInfo(); }}在使用依赖注入方式时解决了传统方式耦合度如果后期变更实现只要在 services.AddTransientIUserInfoService, UserInfoService();变更成UserInfoMongoService即可在所有使用IUserInfoService的地方无须做任何改动而且可以非常简单的设置生命周期TransientScopedSingleton四、总结1、设置注入和获取注入的方式不止一种示例只是演示了最简单和最常用的使用方式其他方式可以参考文档2、可以替换.net core中的默认注入容器 如常用的autofac可以实现更强大的功能详情参考 https://autofac.org/其他容器可以参考  https://github.com/aspnet/Extensions/tree/master/src/DependencyInjection3、可以直接在View中获取注入 inject IUserInfoService userInfoService4、可以在httpcontext里直接获取注入HttpContext.RequestServices.GetServiceIUserInfoService ();5、Startup中的ConfigureServices方法就是为了设置注入而存在的;原文地址https://www.cnblogs.com/emrys5/p/aspnetcoredi.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.pierceye.com/news/990490/

相关文章:

  • 重庆做网站设计培训机构排名全国十大教育机构排名
  • 做网站建设销售网络营销推广技巧
  • 南宁网站制作定制北京网站seo服务
  • 门户网站网页设计规范willin kan 让你的wordpress飞起来
  • 建设银行广州招聘网站wordpress dz
  • 如何介绍自己做的网站东莞回收网站设计
  • 北京驾校网站建设厦门网页设计培训班
  • 网络公司给我做网站我有没有源代码版权吗我怎么做个人网站
  • 免费建站网站一站式做网站需要懂那些软件
  • 做新网站怎样提交360寻找销售团队外包
  • 重庆市建设网站wordpress 新闻模版
  • 国内网站建设推荐手工做的网站
  • 深圳罗湖做网站的公司网站建设与管理案例教程第三版课后答案
  • 有关网站招标商务标书怎么做做终端客户网站
  • c 网站做微信收款功能青岛网站建设定制
  • 贵州安顺建设主管部门网站网站全程设计技术
  • 公司宣传网站建设企业网站建设与实现的论文
  • 连云港网站建设推广网站的推广优化
  • 手机商城网站制作公司网站版面设计方案
  • 网站开发制作熊掌号网站推广方法主要有什么
  • 怎么查看网站的建设时间提高企业网站的访问率
  • 宁德做网站的公司长沙网站建设 芙蓉区
  • 兴平市住房和城乡建设局门户网站会员管理网站建设
  • 做seo的网站是怎么样的上饶小程序开发公司
  • 网站硬件需求建网站网站
  • 网站主机域名合肥室内装修设计培训
  • 上海网站优化网站对企业的作用
  • 哪些园林网站可以做外链网址怎么注册
  • 做网站域名服务器wordpress 互动性
  • 微信网站欣赏好看的旅游网站模版