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

七台河市网站建设_网站建设公司_门户网站_seo优化

湖州做网站推广的公司,网站发布方式 提高,查找使用wordpress的网站,在线代理网页免费前言近段时间在准备公司的技术分享#xff0c;所以这段时间将大部分时间放在准备分享内容上去了。博客也就停了一下下。在.NET Core中处理依赖注入问题时#xff0c;往往是定义好了一个操作规范的接口#xff0c;会有N多个基于不同技术的实现#xff0c;根据实际情况在项目… 前言近段时间在准备公司的技术分享所以这段时间将大部分时间放在准备分享内容上去了。博客也就停了一下下。在.NET Core中处理依赖注入问题时往往是定义好了一个操作规范的接口会有N多个基于不同技术的实现根据实际情况在项目中去使用某一个实现。但是偶尔会出现这样的情况在某一个地方需要同时使用到两种或两种以上的实现这个时候我们要怎么处理呢借助Autofac等第三方组件时是可以很容易的实现但是在写一些基础类库时会避免直接引用太多依赖组件。所以这里是只用微软自带的DI(Microsoft.Extensions.DependencyInjection)去处理。例子引入现在有一个接口和两个实现类。public interface IDemoService{    string Get(); } public class DemoServiceA : IDemoService{     public string Get()    {          return Service A;} }  public class DemoServiceB : IDemoService{     public string Get()    {          return Service B;} }常规的方法我们先在Startup中的ConfigureServices方法中添加我们的service。public void ConfigureServices(IServiceCollection services){services.AddSingletonIDemoService, DemoServiceA();services.AddSingletonIDemoService, DemoServiceB();services.AddMvc(); }然后在控制器中使用private IDemoService _serviceA;private IDemoService _serviceB;public ValuesController(IDemoService serviceA, IDemoService serviceB){_serviceA serviceA;_serviceB serviceB; }// GET api/values[HttpGet]public string Get(){    return ${_serviceA.Get()}-{_serviceB.Get()}; }我们的预期结果是Service A-Service B可是上面代码的实际结果却并不像我们想的那么简单可以看到这里输出的都是Service B连Service A的影子都没有看到。其实从代码都可以看出来它只能拿到其中一个Service的实现类那么我们要息怎样处理才能达到我们想要的效果呢其实思路比较简单上面导致不能拿到对应实现类本质上来讲应该说是它区分不了那个才是想要的我们想个办法让它能区分就好了。处理方法给我们的Service起个别名先是Startup中的ConfigureServices方法。public void ConfigureServices(IServiceCollection services){services.AddSingletonDemoServiceA();services.AddSingletonDemoServiceB();services.AddSingleton(factory {Funcstring, IDemoService accesor key {                     if (key.Equals(ServiceA)){                             return factory.GetServiceDemoServiceA();}                       else if (key.Equals(ServiceB))                     {                               return factory.GetServiceDemoServiceB();}                    else{                           throw new ArgumentException($Not Support key : {key});}};        return accesor;});services.AddMvc(); }这里并没有直接向上面那样一次性指定接口和对应的实现类而是用了AddSingleton的另一个重载方法。先将实现类注册一下然后再注册一下Funcstring, IDemoService先来说说这个Funcstring, IDemoService里面的string和IDemoService都分别代表什么。string 毫无疑问就是我们上面说到的别名IDemoService 这个就是我们要用的Service核心在于factory参数是IServiceProvider类型的所以我们可以根据这个factory去找到我们前面注册的实现类。这样解释一下是不是就清晰了呢然后再来看看在控制器上面怎么用。private IDemoService _serviceA;private IDemoService _serviceB;private readonly Funcstring, IDemoService _serviceAccessor;public ValuesController(Funcstring, IDemoService serviceAccessor){    this._serviceAccessor serviceAccessor;_serviceA _serviceAccessor(ServiceA);_serviceB _serviceAccessor(ServiceB); }// GET api/values[HttpGet]public string Get(){       return ${_serviceA.Get()}-{_serviceB.Get()}; }最后看看结果是不是和我们的预期一样。结果与预期一致。总结一对一或许是最好的方法也是最为理想的这样能避开很多不必要的问题。但是现实中总会出现特殊情况面对这些特殊情况我们也是需要能够重容的面对。原文地址http://www.cnblogs.com/catcher1994/p/handle-multi-implementations-with-same-interface-in-dotnet-core.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.lebaoying.cn/news/88072.html

相关文章:

  • 阿里巴巴网站图片怎么做的房地产网站推荐
  • 网站建设劳务协议如何用文件传输协议登陆网站
  • 企业网站制作前期需要什么资料做一家电商网站需要多少钱
  • 网站服务内容网站建设无锡网站优化
  • wordpress企业网站定制教程 一织梦中英文网站源码
  • 在线作图网站旅游手机网站建设智慧旅游
  • 织梦开发网站wordpress自定义代码在哪里
  • 网页版传奇网站网站建设之织梦后台熊掌号主页
  • 校园微网站建设方案ppt国外做免费的视频网站有哪些
  • 购物网站哪个最好wordpress编辑器修改
  • 可以做外链的图片网站电商关键字优化
  • vps 网站能打开南充房产交易网官网
  • 重庆手机网站方案设计成功的网络营销案例及分析
  • 如何构建成交型网站深圳网站设计公司让您放心省心
  • 公司做网站开发流程做网站的基本知识
  • 广平专业做网站php源码项目门户网站开发
  • 免费空间如何放网站成都网络推广建站
  • 展览网站模板大全网站托管
  • 网站群 seo中国建设监理协会网站会员专区
  • 河北智能网站建设多少钱免费服务器空间
  • 专业网站搭建定做网络安全教育知识
  • 中国十大平面设计师排名保定网站建设seo优化营销
  • 宁波网站排名优化报价wordpress文字类主题
  • 郑州区块链数字钱包网站开发周期wordpress菜单栏菜单简介
  • 劳动人事争议仲裁网站建设无极领域付费网站
  • 汉中专业做网站没有网站可以做cpa广告么
  • 做兼职网站的项目初衷微信公众号第三方平台有哪些
  • 淄博周村学校网站建设报价地图设计网站
  • 网站开发感受视听节目 网站建设
  • 网站建设常用的开发语言介绍淮南市网站建设