详解ASP.NET Core 中的框架级依赖注入

2025-05-29 0 72

1、ASP.NET Core 中的依赖注入

此示例展示了框架级依赖注入如何在 ASP.NET Core 中工作。 其简单但功能强大,足以完成大部分的依赖注入工作。框架级依赖注入支持以下 scope:

  1. Singleton — 总是返回相同的实例
  2. Transient — 每次都返回新的实例
  3. Scoped — 在当前(request)范围内返回相同的实例

假设我们有两个要通过依赖注入来进行工作的工件:

  1. PageContext — 自定义请求上下文
  2. Settings — 全局应用程序设置

这两个都是非常简单的类。PageContext 类为布局页面提供当前页面标题的标题标签。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28
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 id=\"codetool\">

2、注册依赖

在 UI 构建块中使用这些类之前,需要在应用程序启动时注册这些类。该工作可以在 Startup 类的 ConfigureServices() 方法中完成。

?

1

2

3

4

5

6

7

8
public void ConfigureServices(IServiceCollection services)

{

services.AddMvc();

var settings = new Settings();

settings.SiteName = Configuration["SiteName"];

services.AddSingleton(settings);

services.AddScoped<PageContext>();

}

现在可以将这些类注入到支持依赖注入的控制器和其他 UI 组件中。

3、向控制器注入实例

我们通过 Home 控制器中的 PageContext 类分配页面标题。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24
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();

}

}

这种分配页面标题的方式不错,因为我们不必使用 ViewData,这样更容易受支持多语言应用程序支持。

4、向视图注入实例

现在控制器的 action 中分配了页面标题,是时候在布局页面中使用标题了。 我在页面的内容区域添加了标题,所以在 tech.io 环境中也很容易看到。为了能在布局页面中使用到 PageContext,我使用了视图注入(下面代码片段中的第一行)。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
@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" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css" 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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://oopsguy.com/2017/10/23/dependency-injection-with-asp-net-core/?utm_source=tuicool&utm_medium=referral

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 详解ASP.NET Core 中的框架级依赖注入 https://www.kuaiidc.com/99045.html

相关文章

猜你喜欢
发表评论
暂无评论