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

小米网站设计网站广告如何做

小米网站设计,网站广告如何做,学校网站建设考评办法,福州短视频seo推荐动手造轮子#xff1a;实现一个简单的依赖注入(零)Intro依赖注入为我们写程序带来了诸多好处#xff0c;在微软的 .net core 出来的同时也发布了微软开发的依赖注入框架 Microsoft.Extensions.DependencyInjection#xff0c;大改传统 asp.net 的开发模式#xff0c;asp.ne… 动手造轮子实现一个简单的依赖注入(零)Intro依赖注入为我们写程序带来了诸多好处在微软的 .net core 出来的同时也发布了微软开发的依赖注入框架 Microsoft.Extensions.DependencyInjection大改传统 asp.net 的开发模式asp.net core 的开发更加现代化更加灵活更加优美。依赖注入介绍要介绍依赖注入首先来聊一下控制反转IoCIoc—Inversion of Control即“控制反转”不是什么技术而是一种设计思想。Ioc意味着将你设计好的对象交给容器控制而不是传统的在你的对象内部直接控制。谁控制谁控制什么传统程序设计我们直接在对象内部通过 new 进行创建对象是程序主动去创建依赖对象而IoC是有专门一个容器来创建这些对象即由 IoC 容器来控制对 象的创建谁控制谁当然是IoC 容器控制了对象控制什么那就是主要控制了外部资源获取不只是对象包括比如文件等。为何是反转哪些方面反转了有反转就有正转传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象也就是正转而反转则是由容器来帮忙创建及注入依赖对象为何是反转因为由容器帮我们查找及注入依赖对象对象只是被动的接受依赖对象所以是反转哪些方面反转了依赖对象的获取被反转了。IoC 对编程带来的最大改变不是从代码上而是从思想上发生了“主从换位”的变化。应用程序原本是老大要获取什么资源都是主动出击但是在 IoC/DI 思想中应用程序就变成被动的了被动的等待 IoC 容器来创建并注入它所需要的资源了。IoC 很好的体现了面向对象设计法则之一—— 好莱坞法则“别找我们我们找你”即由 IoC 容器帮对象找相应的依赖对象并注入而不是由对象主动去找。DI—Dependency Injection即“依赖注入”组件之间依赖关系由容器在运行期决定形象的说即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能而是为了提升组件重用的频率并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制我们只需要通过简单的配置而无需任何代码就可指定目标需要的资源完成自身的业务逻辑而不需要关心具体的资源来自何处由谁实现。理解DI的关键是“谁依赖谁为什么需要依赖谁注入谁注入了什么”那我们来深入分析一下  ●谁依赖于谁当然是应用程序依赖于 IoC 容器  ●为什么需要依赖应用程序需要 IoC 容器来提供对象需要的外部资源  ●谁注入谁很明显是 IoC 容器注入应用程序里依赖的对象  ●注入了什么就是注入某个对象所需要的外部资源/依赖。 依赖注入明确描述了 “被注入对象依赖 IoC 容器配置依赖对象”依赖注入是控制反转设计思想的一种实现。依赖注入的好处对象的创建和销毁完全交给 ioc 容器去做不再需要在应用中关心对象的创建的和销毁这对于 C# 里的 IDisposable 对象来说尤为重要自己去 new 的时候对于一些新手来说可能会忘记使用 using 或手动 dispose对象的复用有时候很多对象没有必要每次用的时候就去创建一次使用 ioc 可以控制在同一生命周期内的对象只被创建一次依赖关系更清晰更好的实现面向接口编程替换实现只需要注入服务的时候换成另外一种实现就可以了大概设计大体使用类似于微软的依赖注入框架但是比微软的依赖注入框架简单一些性能也有待优化。服务生命周期服务的生命周期沿用微软的服务生命周期分为 Singleton/ Scoped/ Transient默认值是 Singleton 单例模式服务注册方式支持所有微软依赖注入的注册方式实例注入/类型注入/接口-实现注入/func 注入注入方式目前仅支持依赖注入构造方法注入未来暂时也没有支持属性注入的打算支持的话也不复杂但是依赖关系就不清晰了也不推荐用构造方法注入支持直接注入 IEnumerableT 或 IReadOnlyCollectionT 或 IReadOnlyListT 来支持获取一个接口多个实现的注入支持泛型注入DI 相关类图体验一下可以参考单元测试using(IServiceConatiner container new ServiceContainer()) { container.AddSingletonIConfiguration(new ConfigurationBuilder() .AddJsonFile(appsettings.json) .Build() ); container.AddScopedIFly, MonkeyKing(); container.AddScopedIFly, Superman(); container.AddScopedHasDependencyTest(); container.AddScopedHasDependencyTest1(); container.AddScopedHasDependencyTest2(); container.AddScopedHasDependencyTest3(); container.AddScoped(typeof(HasDependencyTest4)); container.AddTransientWuKong(); container.AddScopedWuJing(serviceProvider new WuJing()); container.AddSingleton(typeof(GenericServiceTest)); var rootConfig container.ResolveServiceIConfiguration(); Assert.ThrowsInvalidOperationException(() container.ResolveServiceIFly()); Assert.ThrowsInvalidOperationException(() container.ResolveRequiredServiceIDependencyResolver()); using (var scope container.CreateScope()) { var config scope.ResolveServiceIConfiguration(); Assert.Equal(rootConfig, config); var fly1 scope.ResolveRequiredServiceIFly(); var fly2 scope.ResolveRequiredServiceIFly(); Assert.Equal(fly1, fly2); var wukong1 scope.ResolveRequiredServiceWuKong(); var wukong2 scope.ResolveRequiredServiceWuKong(); Assert.NotEqual(wukong1, wukong2); var wuJing1 scope.ResolveRequiredServiceWuJing(); var wuJing2 scope.ResolveRequiredServiceWuJing(); Assert.Equal(wuJing1, wuJing2); var s0 scope.ResolveRequiredServiceHasDependencyTest(); s0.Test(); Assert.Equal(s0._fly, fly1); var s1 scope.ResolveRequiredServiceHasDependencyTest1(); s1.Test(); var s2 scope.ResolveRequiredServiceHasDependencyTest2(); s2.Test(); var s3 scope.ResolveRequiredServiceHasDependencyTest3(); s3.Test(); var s4 scope.ResolveRequiredServiceHasDependencyTest4string(); s4.Test(); using (var innerScope scope.CreateScope()) { var config2 innerScope.ResolveRequiredServiceIConfiguration(); Assert.True(rootConfig config2); var fly3 innerScope.ResolveRequiredServiceIFly(); fly3.Fly(); Assert.NotEqual(fly1, fly3); } var flySvcs scope.ResolveServicesIFly(); foreach (var f in flySvcs) f.Fly(); } var genericService1 container.ResolveRequiredServiceGenericServiceTestint(); genericService1.Test(); var genericService2 container.ResolveRequiredServiceGenericServiceTeststring(); genericService2.Test(); }更多详情可以参考 https://github.com/WeihanLi/WeihanLi.Common/blob/dev/test/WeihanLi.Common.Test/DependencyInjectionTest.cs More源码已经在 Github 上可以自行下载阅览或等后面的几篇文章分享解读Referencehttps://blog.csdn.net/sinat_21843047/article/details/80297951https://www.cnblogs.com/artech/p/inside-asp-net-core-03-04.htmlhttps://github.com/aspnet/DependencyInjection/tree/rel/2.0.0https://github.com/microsoft/MinIoChttps://github.com/WeihanLi/WeihanLi.Common/tree/dev/src/WeihanLi.Common/DependencyInjection
http://www.zqtcl.cn/news/224044/

相关文章:

  • 中国建设银行网站首页wordpress安装多个
  • 中国住建厅网站官网怎么建立网站快捷方式
  • 天津协会网站建设怎么用dw做带登陆的网站
  • 南宁做网站服务商苏州网站建设品牌
  • 做平台销售网站上海市普陀区建设规划局网站
  • 网站的积分系统怎么做电影在线观看
  • 成都网站建设方案服务旅游网站建设报价单
  • 京东网址seo排名查询工具
  • 南京制作网站速成班外贸营销信模板
  • 简单网站建设规划方案物联网网站设计
  • 做360网站官网还是百度四川平台网站建设方案
  • 做网站的主题有哪些精品课程网站建设情况
  • 帝国网站开发电商平台搭建
  • 建设工程网站tcwordpress 标题入库
  • 网站开发简直广州网站制作后缀
  • 上海短视频seo优化网站wordpress 构建知识库
  • 做的网站图片不显示2018做网站赚钱不
  • 国内建站平台网站建设是什么科目
  • 响应式个人网站psd建设银行网站联系电话
  • 大型网站开发实战品牌网站建设费用要多少
  • 昆山网站建设昆山html5制作手机端页面
  • 做网站的国标有哪些达州网络推广
  • 站内seo和站外seo区别wordpress演示数据
  • 建设旅游网站财务分析创意设计公司网站
  • 张家港网站优化wordpress调用图片上传
  • 做网站要商标吗房产网站 设计方案
  • 做网站的费用怎么做账客户案例 网站建设
  • 怎么查询网站的备案号城乡建设杂志网站
  • 婚恋网站哪家做的最好北斗导航2022最新版手机版
  • 别墅效果图网站重庆金融公司网站建设