在ASP.Net Web Forms中使用依賴注入的步驟
依賴注入技術(shù)就是將一個(gè)對(duì)象注入到一個(gè)需要它的對(duì)象中,同時(shí)它也是控制反轉(zhuǎn)的一種實(shí)現(xiàn),顯而易見,這樣可以實(shí)現(xiàn)對(duì)象之間的解耦并且更方便測(cè)試和維護(hù),依賴注入的原則早已經(jīng)指出了,應(yīng)用程序的高層模塊不依賴于低層模塊,而應(yīng)該統(tǒng)一依賴于抽象或者接口。
在 .Net Framework 4.7.2 中引入了對(duì)依賴注入的支持,終于在 ASP.Net Web Forms 中可以使用依賴注入機(jī)制了,這篇文章將會(huì)討論如何在 ASP.Net Web Forms 中去使用。
創(chuàng)建 WebForm 項(xiàng)目
在 ASP.Net Web Forms 中使用依賴注入,一定要記得將項(xiàng)目框架設(shè)為 4.7.2 以上,要么右鍵項(xiàng)目在屬性面板上選擇 4.7.2 版本。

也可以直接在 web.config 做如下設(shè)置。
<system.web> <compilation debug="true" targetFramework="4.7.2" /> <httpRuntime targetFramework="4.7.2" /> ... </system.web>
接下來就可以通過 Nuget 安裝 AspNet.WebFormsDependencyInjection.Unity 包,可以通過 Visual Studio 2019 的 NuGet package manager 可視化界面安裝 或者 通過 NuGet package manager 命令行工具輸入以下命令:
dotnet add package AspNet.WebFormsDependencyInjection.Unity
創(chuàng)建實(shí)體 和 接口
現(xiàn)在創(chuàng)建一個(gè)名為 Author 實(shí)體類 和 IAuthorRepository 接口。
public class Author
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public interface IAuthorRepository
{
bool Create(Author author);
Author Read(int id);
List<Author> Read();
}
然后再用 AuthorRepository 類實(shí)現(xiàn)一下 IAuthorRepository 接口,代碼如下:
public class AuthorRepository : IAuthorRepository
{
public bool Create(Author author)
{
throw new System.NotImplementedException();
}
public Author Read(int id)
{
throw new System.NotImplementedException();
}
public List<Author> Read()
{
throw new System.NotImplementedException();
}
}
創(chuàng)建容器和類型注冊(cè)
現(xiàn)在我們創(chuàng)建 依賴注入容器,然后注入我們想要的類型,下面的代碼用于創(chuàng)建 Unity容器。
var container = this.AddUnity();
然后在 Application_Start 事件中進(jìn)行對(duì)象的 依賴配置,如下代碼所示:
container.RegisterType<IAuthorRepository, AuthorRepository>();
對(duì)了,記的引入一下如下兩個(gè)命名空間。
- AspNet.WebFormsDependencyInjection.Unity
- Unity
下面是 Global 類的完整代碼,僅供參考。
using Microsoft.AspNet.WebFormsDependencyInjection.Unity;
using System;
using System.Web;
using System.Web.Optimization;
using System.Web.Routing;
using Unity;
namespace WebformsDIDemo
{
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
var container = this.AddUnity();
container.RegisterType<IAuthorRepository, AuthorRepository>();
// Code that runs on application startup
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
WebForms 使用依賴注入
現(xiàn)在容器,對(duì)象依賴都配置好了,接下來怎么在 Page 中用呢? 可以參考下面的代碼。
public partial class _Default : Page
{
private IAuthorRepository _authorRepository;
public _Default(IAuthorRepository authorRepository)
{
_authorRepository = authorRepository;
}
protected void Page_Load(object sender, EventArgs e)
{
}
}

上面的圖很明顯的顯示了,authorRepository 實(shí)例在運(yùn)行時(shí)中已被成功注入。
在 .Net Framework 4.7.2 框架以上,終于將 依賴注入機(jī)制 帶入到了 ASP.Net Web Forms 中,需要明白的是,微軟自帶的Unity包是一個(gè)輕量級(jí)的依賴注入容器,可以在 頁(yè)面,控件,handler,module 上使用,在 ASP.Net Web Forms 中使用依賴注入可以輕松創(chuàng)建對(duì)象,然后在運(yùn)行時(shí)獲取依賴,可讓你輕松構(gòu)建靈活,松散的應(yīng)用程序。
以上就是在ASP.Net Web Forms中使用依賴注入的步驟的詳細(xì)內(nèi)容,更多關(guān)于ASP.Net Web Forms中使用依賴注入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 詳解asp.net core 依賴注入
- ASP.NET Core 過濾器中使用依賴注入知識(shí)點(diǎn)總結(jié)
- ASP.NET MVC實(shí)現(xiàn)依賴注入的完整過程
- ASP.NET Core依賴注入系列教程之控制反轉(zhuǎn)(IoC)
- ASP.NET Core依賴注入系列教程之服務(wù)的注冊(cè)與提供
- 詳解ASP.NET Core 中的框架級(jí)依賴注入
- 詳解ASP.NET Core 在 JSON 文件中配置依賴注入
- 解讀ASP.NET 5 & MVC6系列教程(7):依賴注入
- 擴(kuò)展ASP.NET MVC三層框架且使用StructureMap實(shí)現(xiàn)依賴注入1-Model層
相關(guān)文章
asp.net 從POST的數(shù)據(jù)流中提取參數(shù)和文件
按理,F(xiàn)orm提交的數(shù)據(jù),無論是application/x-www-form-urlencoded還是multipart/form-data(有附件時(shí)),都可在服務(wù)端通過Request.Form["name"]和Request.Files["name"]獲取到參數(shù)和上傳的文件。2010-02-02
ASP.NET Core利用Jaeger實(shí)現(xiàn)分布式追蹤詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core利用Jaeger實(shí)現(xiàn)分布式追蹤的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
利用asp.net實(shí)現(xiàn)生成不重復(fù)訂單號(hào)
訂單號(hào)在購(gòu)物過程中起到了很好的識(shí)別作用,更方便的有利于工作人員識(shí)別商品,本文介紹利用asp.net實(shí)現(xiàn)生成訂單號(hào)2012-12-12
.net?6項(xiàng)目實(shí)現(xiàn)壓縮發(fā)布
這篇文章介紹了.net?6項(xiàng)目實(shí)現(xiàn)壓縮發(fā)布的方式,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
Global.asax取物理路徑/取絕對(duì)路徑具體方法
本文章來給大家簡(jiǎn)單介紹利用Global.asax取物理路徑和取絕對(duì)路徑代碼,有需要了解的朋友可參考參考2013-08-08
VS2015+Qt5+OpenCV3開發(fā)環(huán)境配置
這篇文章主要為大家詳細(xì)介紹了VS2015+Qt5+OpenCV3開發(fā)環(huán)境配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06

