介紹asp.netcore依賴注入-創(chuàng)新互聯(lián)

這篇文章主要講解了“介紹asp.net core 依賴注入”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“介紹asp.net core 依賴注入”吧!

從策劃到設(shè)計制作,每一步都追求做到細膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁設(shè)計、主機域名、網(wǎng)絡(luò)空間、網(wǎng)絡(luò)營銷、VI設(shè)計、 網(wǎng)站改版、漏洞修補等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進步。

前言

好久沒有寫微博了,因為前段時間由于家庭原因決定從工作了3年多的北京轉(zhuǎn)移到上海去。依賴注入在學(xué)習(xí)net core的時候也有寫過類似的東西,只是實踐的較少,結(jié)果來到上海新公司系統(tǒng)框架涉及到了這塊知識點,所以在了解完自己的項目之后決定做一些相關(guān)的總結(jié)。接下來就讓我們先來了解hewi依賴注入。

什么是依賴注入

依賴注入,全稱是“依賴注入到容器”, 容器(IOC容器)是一個設(shè)計模式,它也是個對象,你把某個類(不管有多少依賴關(guān)系)放入這個容器中,可以“解析”出這個類的實例。所以依賴注入就是把有依賴關(guān)系的類放入容器(IOC容器)中,然后解析出這個類的實例。劃重點:依賴注入是為了實現(xiàn)控制反轉(zhuǎn)的一種設(shè)計模式。【現(xiàn)在知道gof之外還有其他的設(shè)計模式了吧。】

為什么要用依賴注入

我們編程希望高內(nèi)聚低耦合,所以解耦是很多理論的出發(fā)點,依賴注入控制反轉(zhuǎn)也是為了解耦。那么冒昧問一下啊低耦合是什么?我的理解就是:我們在編程過程中,我們不需要知道組件與類庫的內(nèi)容只需知道他們提供的接口,調(diào)用接口就能實現(xiàn)功能,我們就說這種情況是低耦合。

在沒有接觸到依賴注入的時候,解耦的思路其實也就是gof設(shè)計模式和設(shè)計原則。我以前分享的很多文章牽涉到的封裝類庫都是基于面向接口的方式。舉個例子:

public interface IOrder
{
//Product 產(chǎn)品對象
decimal ValueProducts(params Product[] products);
}

public class Order : IOrder
{
public decimal ValueProducts(params Product[] products)
{
return products.Sum(p => p.Price*p.Number);
}
}

以上是在做商城經(jīng)常寫的一個基類。比如我們以前商城中購物車下單就算其總價的方法調(diào)用的時候。

public class ShoppingCart
 {
  //計算購物車內(nèi)商品總價錢
  public decimal CalculateStockValue()
  {
  Product[] products = {
  new Product {Name = "龍牙2016新款", Number=2,ModelNo = 121,ColorID=65,SizeID=78, Price = 289.40},
  new Product {Name = "龍牙2017新款", ModelNo = 121,ColorID=65,SizeID=78, Number=2,Price =3800},
  };
  IOrder order = new Order();
  //計算商品總價錢 
  decimal totalValue = order.ValueProducts(products);
  return totalValue;
  }
 }

以上是我常用的方式來處理自己的業(yè)務(wù)需求的。這種面向接口的方式,如果我們要計算金額的方式改變了,比如我們尺寸32的金額打7折,那么只需增加金額的類。改變接口實例化即可。代碼就不敲了應(yīng)該都懂吧(低耦合)。那么我們可以看出ShoppingCart是依賴于接口與實現(xiàn)的對不對,那么現(xiàn)在我們考慮一個問題,購物車雖然調(diào)用接口實例化,但是它也是要依賴于order的,那么減少它的依賴性有沒有辦法——就是把他們完全分開。那么這種問題的解決就用到了依賴注入了。劃重點:依賴注入就是減少對接口實例化對象的依賴。那么怎么來實現(xiàn)依賴注入呢?

構(gòu)造注入的實現(xiàn)

通過類的構(gòu)造函數(shù)

第一次看net core別人也是講的這種方式,下面看一下代碼。設(shè)置一個服務(wù)類接口類型的數(shù)據(jù)成員,并以構(gòu)造函數(shù)為注入點,這個構(gòu)造函數(shù)接受一個具體的服務(wù)類實例為參數(shù),并將它賦給服務(wù)類接口類型的數(shù)據(jù)成員。

public class ShoppingCart
 {
  IOrder order;
  //構(gòu)造函數(shù),參數(shù)為實現(xiàn)了IOrder 接口的類的實例
  public ShoppingCart(IOrder _order)
  {
  order = _order;
  }
  //計算購物車內(nèi)商品總價錢
  public decimal CalculateStockValue()
  {
  Product[] products = {
   new Product {Name = "龍牙2016新款", Number=2,ModelNo = 121,ColorID=65,SizeID=78, Price = 289.40},
   new Product {Name = "龍牙2017新款", ModelNo = 121,ColorID=65,SizeID=78, Number=2,Price =3800}}; //計算商品總價錢
  decimal totalValue = order.ValueProducts(products);
  return totalValue;
  }

以上代碼最秒的地方就是ShoppingCart與接口IOrder的實現(xiàn)order完全沒有關(guān)系,不需要了解他是怎么實現(xiàn)的。這就是依賴注入。這種叫做構(gòu)造注入。

在我們討論下一種注入的方式的時候,有個問題其實還沒有解決?!耙蕾囀侨绾萎a(chǎn)生的?”把依賴當(dāng)作構(gòu)造函數(shù)參數(shù)來寫,盡管使用這可以手動提供這種依賴,但是當(dāng)整個系統(tǒng)都依賴注入,那就意味著任何一個組件我們都需要知如道滿足每一部分的需求(服務(wù)定位器),是不是很頭大?那么這時我們就要要引入一個概念的“容器”-----依賴注入容器。

protected override void RegisterBuilder(ContainerBuilderWrapper builder)
 {
  base.RegisterBuilder(builder);      //注入倉儲
  builder.RegisterType<Order>().As<IOrder>();
 }

以上為mvc容器的一種實現(xiàn)。AS 后邊是服務(wù)類繼承的接口,其實我對它的理解就是:如果有人請求這種類型。我們就給他這個類型的對象。

屬性注入


其實依賴注入spring相關(guān)的資料應(yīng)該有很多,所以很多知識點也是通過java那的理論借鑒過來的。屬性注入我確實看的net的書了解的。

如果需要使用到被依賴對象的某個屬性,在被依賴對象被創(chuàng)建之后,IoC容器會自動初始化該屬性

首先還是定一個接口

public interface Iorder
 {
  {
  //Product 產(chǎn)品對象
  decimal ValueProducts(params Product[] products);
  }
 }

屬性注入如下:

public class ShoppingCart
 {
  private iordre _order;
  public iordre Order
  {
  get { return _order; }
  set { _order = value; }
  }
  public decimal ValueProducts(params Product[] products)
  {
  return Order.ValueProducts(products);
  }
 }

Setter注入

設(shè)置一個服務(wù)類接口類型的數(shù)據(jù)成員,并設(shè)置一個Set方法作為注入點,這個Set方法接受一個具體的服務(wù)類實例為參數(shù),并將它賦給服務(wù)類接口類型的數(shù)據(jù)成員。其實這種是注入方式較為靈活使用者也較多。

//服務(wù)接口
 internal interface IServiceClass
 {
  String ServiceInfo();
 }

 //服務(wù)方法
 internal class ServiceClassA : IServiceClass
 {
  public String ServiceInfo()
  {
  return "我是ServceClassA";
  }
 }
 //服務(wù)方法
 internal class ServiceClassB : IServiceClass
 {
  public String ServiceInfo()
  {
  return "我是ServceClassB";
  }
 }
 //客戶類實現(xiàn)set
 internal class ClientClass
 {
  private IServiceClass _serviceImpl;

  public void Set_ServiceImpl(IServiceClass serviceImpl)
  {
  this._serviceImpl = serviceImpl;
  }

  public void ShowInfo()
  {
  Console.WriteLine(_serviceImpl.ServiceInfo());
  }
 }

 //調(diào)用
 class Program
 {
  static void Main(string[] args)
  {
  IServiceClass serviceA = new ServiceClassA();
  IServiceClass serviceB = new ServiceClassB();
  ClientClass client = new ClientClass();

  client.Set_ServiceImpl(serviceA);
  client.ShowInfo();
  client.Set_ServiceImpl(serviceB);
  client.ShowInfo();
  }
 }

結(jié)束語


其實依賴注入可聊的有很多,net core的出現(xiàn)依賴注入是必不可少的一個知識點。后面可聊的比如依賴注入與反射,依賴注入與多態(tài),依賴注入的框架。。。。。。。

好久不寫博客,準備的也不夠充分。有興趣的小伙伴就去網(wǎng)上找去吧。

.net書的話:

《asp net mvc5 高級編程》《Dependency Injection in .NET 》(沒有中文)

java相關(guān)的書應(yīng)該會多一些。有興趣的就一起學(xué)習(xí)一下吧。

感謝各位的閱讀,以上就是“介紹asp.net core 依賴注入”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對介紹asp.net core 依賴注入這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)站欄目:介紹asp.netcore依賴注入-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://www.muchs.cn/article24/djhpje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計公司電子商務(wù)、面包屑導(dǎo)航網(wǎng)站營銷、虛擬主機

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管