如何在 Web Forms 中引入依赖注入机制

依赖注入技术就是将一个对象注入到一个需要它的对象中,同时它也是控制反转的一种实现,显而易见,这样可以实现对象之间的解耦并且更方便测试和维护,依赖注入的原则早已经指出了,应用程序的高层模块不依赖于低层模块,而应该统一依赖于抽象或者接口。

.Net Framework 4.7.2 中引入了对依赖注入的支持,终于在 ASP.Net Web Forms 中可以使用依赖注入机制了,这篇文章将会讨论如何在 ASP.Net Web Forms 中去使用。

创建 WebForm 项目

在 ASP.Net Web Forms 中使用依赖注入,一定要记得将项目框架设为 4.7.2 以上,要么右键项目在属性面板上选择 4.7.2 版本。

也可以直接在 web.config 做如下设置。


<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

创建实体 和 接口

现在创建一个名为 Author 实体类 和 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 类实现一下 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();}}

创建容器和类型注册

现在我们创建 依赖注入容器,然后注入我们想要的类型,下面的代码用于创建 Unity容器


var container = this.AddUnity();

然后在 Application_Start 事件中进行对象的 依赖配置,如下代码所示:


container.RegisterType<IAuthorRepository, AuthorRepository>();

对了,记的引入一下如下两个命名空间。

  • 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 startupRouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}}
}

WebForms 使用依赖注入

现在容器,对象依赖都配置好了,接下来怎么在 Page 中用呢?可以参考下面的代码。

public partial class _Default : Page{private IAuthorRepository _authorRepository;public _Default(IAuthorRepository authorRepository){_authorRepository = authorRepository;}protected void Page_Load(object sender, EventArgs e){}}

上面的图很明显的显示了,authorRepository 实例在运行时中已被成功注入。

在 .Net Framework 4.7.2 框架以上,终于将 依赖注入机制 带入到了 ASP.Net Web Forms 中,需要明白的是,微软自带的Unity包是一个轻量级的依赖注入容器,可以在 页面,控件,handler,module 上使用,在 ASP.Net Web Forms 中使用依赖注入可以轻松创建对象,然后在运行时获取依赖,可让你轻松构建灵活,松散的应用程序。

译文链接:https://www.infoworld.com/article/3397003/how-to-use-dependency-injection-in-aspnet-web-forms.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python网页动图_python,tensorflow线性回归Django网页显示Gif动态图

1.工程组成2.urls.py"""Django_machine_learning_linear_regression URL ConfigurationThe urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/2.1/topics/http/urls/Examples:Function views1. Add …

asp.net core集成CKEditor实现图片上传功能

背景本文为大家分享了asp.net core 如何集成CKEditor &#xff0c;并实现图片上传功能的具体方法&#xff0c;供大家参考&#xff0c;具体内容如下。准备工作1.visual studio 2019 开发环境2.net core 2.0 及以上版本实现方法1、新建asp.net core web项目2、下载CKEditor这里我…

看了一天小说

在公司呆了一天什么都没干&#xff0c;看了一天小说。都不知道自己啥时候变得这么堕落的&#xff0c;不过还好&#xff0c;至少小说是我喜欢看的那种&#xff0c;很热血的小说。不会有主管看到我的Blog吧&#xff0c; 明天要干点正事了&#xff0c;还是得跟自己说一下&#xff…

Blazor VS React / Angular / Vue.js

原文作者: Christian Findlay原文链接&#xff1a;https://christianfindlay.com/2020/06/04/blazor-vs-react-angular-vue-js/Blazor是一项新的Microsoft技术&#xff0c;允许开发人员使用C&#xff03;为浏览器编写代码, 本文将Blazor与其他三个常见SPA框架进行了比较&#x…

c语言的使用比例远远高于python语言对吗_Python和C语言的语法有什么不同?

随着经济发发展&#xff0c;互联网精英的缺乏越来越严重了&#xff0c;尤其是编程工程师&#xff0c;市场缺乏率极高&#xff0c;所有对于准备即将学习编程朋友&#xff0c;是一个非常的好时机Python和C语言的语法有什么不同&#xff1f;python与C的区别如下&#xff1a;1、语言…

ASP.NET 應用程式的安全性模型

本單元內容 功能 ASP.NET 應用程式依賴於許多不同元素及技術的成功交互操作。每個方案元件都提供安全性功能&#xff0c;以滿足其自身的需求。然而&#xff0c;純粹從個別元件的角度考量安全性還不夠。若要提供整體方案的安全性&#xff0c;您還必須考量元件如何彼此互動。 本單…

.NET开源5年了,这些宝藏你还没get?

从2016年微软发布.NET Core1.0&#xff0c;至今.NET开源也快5年了&#xff0c;GitHub也涌现了很多优秀的开源项目&#xff0c;关于CLR层面调优的讨论也多了起来&#xff0c;尤其是龙芯.NET开源的CLR迁移项目&#xff0c;更是让.NET进入一个全新的时代。鲁迅说过&#xff1a;菜鸟…

C#来创建和读取XML文档 [转]

C&#xff03;来创建和读取XML文档【关键词】&#xff1a;XML 录入&#xff1a;小鱼之家 来源&#xff1a;http://fisher.xundain.com 时间&#xff1a;2005-3-3 23:41:54 点击&#xff1a;85次 扩展标记语言XML&#xff08;eXtensible Markup Language&#xff09;&#xff0…

探索 .NET团队对API的设计流程

原文作者&#xff1a;steve gordon 原文链接: https://www.stevejgordon.co.uk/how-are-dotnet-apis-designed在这篇文章中&#xff0c;我想介绍一些我觉得非常有趣的东西&#xff0c;.NET 团队是如何设计API的&#xff1f;我们先来看下.NET团队面临的有哪些挑战&#xff0c;您…

mybatis mysql usegeneratedkeys_mybatis中useGeneratedKeys用法--插入数据库后获取主键值

前言&#xff1a;今天无意在mapper文件中看到useGeneratedKeys这个词&#xff0c;好奇就查了下&#xff0c;发现能解决我之前插入有外键表数据时&#xff0c;这个外键获取繁琐的问题&#xff0c;于是学习敲DEMO记录在项目中经常需要获取到插入数据的主键来保障后续操作&#xf…

Istio 知多少 | 下一代微服务的守护者

1. 引言在写完eShopOnContainers 知多少[12]&#xff1a;Envoy gateways后&#xff0c;就一直想进一步探索Service Mesh&#xff0c;最近刚在极客时间上学完《Service Mesh入门》&#xff0c;又大致浏览了一遍官方文档&#xff0c;对Istio也算有了基本的认识。下面就根据自己的…

微软家也会出错

下图是2006年2月8日微软WebCast首页的截图转载于:https://www.cnblogs.com/mssite/archive/2006/02/08/327130.html

C# 中的 null 包容运算符 “!” —— 概念、由来、用法和注意事项

在 2020 年的最后一天&#xff0c;博客园发起了一个开源项目&#xff1a;基于 .NET 的博客引擎 fluss&#xff0c;我抽空把源码下载下来看了下&#xff0c;发现在属性的定义中&#xff0c;有很多地方都用到了 null!&#xff0c;如下图所示&#xff1a;这是什么用法呢&#xff1…

微前端架构在容器平台的应用

源宝导读&#xff1a;随着业务的发展&#xff0c;天际-星舟平台未来需要解决与其他云共创共建&#xff0c;跨团队高效协作等诸多问题&#xff0c;而星舟现有的技术架构将难以支撑。本文将介绍星舟平台如何通过向更先进的“微前端”架构演进落地&#xff0c;以应对将来快速增长的…

Microsoft PHP.Net ?

居然发现老外有个项目在把PHP搞成象。NET那样咯&#xff0c;核心是Framework 上把 PHP 编译为MSIL。居然见http://www.php-compiler.net/&#xff0c;而且今年居然还FINAL 1.0出来了&#xff0c;这对象把PHP放到.NET平台上来的人说是好消息。20 February 2006: Phalanger versi…

巧用 Lazy 解决.NET Core中的循环依赖关系

原文作者: Thomas Levesque 原文链接&#xff1a;https://thomaslevesque.com/2020/03/18/lazily-resolving-services-to-fix-circular-dependencies-in-net-core/循环依赖的问题在构建应用程序时&#xff0c;良好的设计应该应避免服务之间的循环依赖, 循环依赖是指某些组件直接…

java的编译器怎么出来_怎样掌握ava编译器的使用,教程在这里,如何进行Java初级学习...

原标题&#xff1a;怎样掌握ava编译器的使用&#xff0c;教程在这里&#xff0c;如何进行Java初级学习Java的学习中&#xff0c;并没有那么的繁琐&#xff0c;只需要我们逐步掌握&#xff0c;就能够发觉java是全世界最好的编程语言之一。那么今天就带领大家进行简单的JAVA初级学…

小试elsa

最近工作需要&#xff0c;在调研BMP产品&#xff08;开源和商用&#xff09;&#xff0c;重点了解了activiti和它的商业产品Alfresco Process Services&#xff0c;这是java的体系&#xff0c;成熟&#xff0c;完善(三方开源库是java多年开源积累下的最宝贵的财富)&#xff0c;…

java抠图人物背景图片_如何进行人物抠图?让你快速完成复杂背景人像的在线抠图...

大多数男生心目中都有一个女神&#xff0c;虽然在其他人眼中不过是普通人&#xff0c;但是在自己眼中她怎么看怎么有魅力。当然对于女神提出的各种各样的“要求”或是请求&#xff0c;你们定然是不会轻易拒绝的。但若是女神需要你帮忙抠图&#xff0c;你知道如何进行人物抠图吗…

防止多次提交的几个比较

1、利用Session(viewState是不行的&#xff0c;viewState要回传才能读到数据)如果有个数据包类StockBillMP&#xff0c;则设定privateStockBillMP M_saveobj { get { return (Session["saveobj"] null)?null:(StockBi…