詳解ASP.NET Core 中的框架級(jí)依賴注入
1、ASP.NET Core 中的依賴注入
此示例展示了框架級(jí)依賴注入如何在 ASP.NET Core 中工作。 其簡(jiǎn)單但功能強(qiáng)大,足以完成大部分的依賴注入工作??蚣芗?jí)依賴注入支持以下 scope:
- Singleton — 總是返回相同的實(shí)例
- Transient — 每次都返回新的實(shí)例
- Scoped — 在當(dāng)前(request)范圍內(nèi)返回相同的實(shí)例
假設(shè)我們有兩個(gè)要通過(guò)依賴注入來(lái)進(jìn)行工作的工件:
- PageContext — 自定義請(qǐng)求上下文
- Settings — 全局應(yīng)用程序設(shè)置
這兩個(gè)都是非常簡(jiǎn)單的類。PageContext 類為布局頁(yè)面提供當(dāng)前頁(yè)面標(biāo)題的標(biāo)題標(biāo)簽。
public class Settings
{
public string SiteName;
public string ConnectionString;
}
public class PageContext
{
private readonly Settings _settings;
public PageContext(Settings settings)
{
_settings = settings;
}
public string PageTitle;
public string FullTitle
{
get
{
var title = (PageTitle ?? "").Trim();
if(!string.IsNullOrWhiteSpace(title) &&
!string.IsNullOrWhiteSpace(_settings.SiteName))
{
title += " | ";
}
title += _settings.SiteName.Trim();
return title;
}
}
}
2、注冊(cè)依賴
在 UI 構(gòu)建塊中使用這些類之前,需要在應(yīng)用程序啟動(dòng)時(shí)注冊(cè)這些類。該工作可以在 Startup 類的 ConfigureServices() 方法中完成。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var settings = new Settings();
settings.SiteName = Configuration["SiteName"];
services.AddSingleton(settings);
services.AddScoped<PageContext>();
}
現(xiàn)在可以將這些類注入到支持依賴注入的控制器和其他 UI 組件中。
3、向控制器注入實(shí)例
我們通過(guò) Home 控制器中的 PageContext 類分配頁(yè)面標(biāo)題。
public class HomeController : Controller
{
private readonly PageContext _pageContext;
public HomeController(PageContext pageContext)
{
_pageContext = pageContext;
}
public IActionResult Index()
{
_pageContext.PageTitle = "";
return View();
}
public IActionResult About()
{
_pageContext.PageTitle = "About";
return View();
}
public IActionResult Error()
{
_pageContext.PageTitle = "Error";
return View();
}
}
這種分配頁(yè)面標(biāo)題的方式不錯(cuò),因?yàn)槲覀儾槐厥褂?ViewData,這樣更容易受支持多語(yǔ)言應(yīng)用程序支持。
4、向視圖注入實(shí)例
現(xiàn)在控制器的 action 中分配了頁(yè)面標(biāo)題,是時(shí)候在布局頁(yè)面中使用標(biāo)題了。 我在頁(yè)面的內(nèi)容區(qū)域添加了標(biāo)題,所以在 tech.io 環(huán)境中也很容易看到。為了能在布局頁(yè)面中使用到 PageContext,我使用了視圖注入(下面代碼片段中的第一行)。
@inject PageContext pageContext
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@pageContext.FullTitle</title>
<environment names="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" rel="external nofollow" />
<link rel="stylesheet" href="~/css/site.css" rel="external nofollow" />
</environment>
<environment names="Staging,Production">
<link rel="stylesheet" rel="external nofollow"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css" rel="external nofollow"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" rel="external nofollow" asp-append-version="true" />
</environment>
</head>
...
</html>
5、參考材料
ASP.NET 5 中的依賴注入(Gunnar Peipman)
ASP.NET Core:使用視圖注入(Gunnar Peipman)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
微信公眾平臺(tái)開發(fā)教程(二) 基本原理及消息接口總結(jié)
本篇文章主要介紹了微信公眾平臺(tái)開發(fā)教程(二) 基本原理及消息接口,具有一定的參考價(jià)值,有興趣的朋友可以了解一下。2016-12-12
asp.net中強(qiáng)制取消TFS2008中其它成員的簽出文件的方法
有個(gè)項(xiàng)目,以前的成員離職了,剛好又簽出了一個(gè)文件在TFS中并且上了鎖,導(dǎo)致后面的維護(hù)無(wú)法簽入和生成。在網(wǎng)上查了一下,找到了如下解決辦法2012-08-08
把ASP.NET MVC項(xiàng)目部署到本地IIS上的完整步驟
最近會(huì)經(jīng)常修改一些網(wǎng)站前端的內(nèi)容,為了方便跟UI和產(chǎn)品交流,需要將自己修改過(guò)的頁(yè)面及時(shí)發(fā)布到測(cè)試機(jī)或者是本地的IIS上。下面這篇文章主要給大家介紹了關(guān)于如何把ASP.NET MVC項(xiàng)目部署到本地IIS上的相關(guān)資料,需要的朋友可以參考下2018-06-06
在?Net7.0?環(huán)境下如何使用?RestSharp?發(fā)送?Http(FromBody和FromForm)請(qǐng)求
這篇文章主要介紹了在?Net7.0?環(huán)境下使用?RestSharp?發(fā)送?Http(FromBody和FromForm)請(qǐng)求,今天,我就兩個(gè)小的知識(shí)點(diǎn),就是通過(guò)使用?RestSharp?訪問(wèn)?WebAPI,提交?FromBody?和?FromForm?兩種方式的數(shù)據(jù),還是有些區(qū)別的,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友參考下吧2023-09-09
IIS實(shí)現(xiàn)反向代理時(shí)Cookie域的設(shè)置方法
這篇文章主要給大家介紹了關(guān)于IIS實(shí)現(xiàn)反向代理時(shí)Cookie域的設(shè)置方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04
VS2019中.NET如何實(shí)現(xiàn)打日志功能
本文主要介紹了VS2019中.NET如何實(shí)現(xiàn)打日志功能,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
WPF實(shí)現(xiàn)定時(shí)刷新UI界面功能
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)定時(shí)刷新UI界面功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

