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

.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

如何在 Web Forms 中引入依赖注入机制相关推荐

  1. ASP.NET CORE MVC 2.0 如何在Filter中使用依赖注入来读取AppSettings

    问: ASP.NET CORE MVC 如何在Filter中使用依赖注入来读取AppSettings 答: Dependency injection is possible in filters as ...

  2. JavaEE开发之Spring中的依赖注入与AOP编程

    上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...

  3. dagger2 注入_如何使用Dagger 2在您的应用程序中实现依赖注入

    dagger2 注入 Kriptofolio应用程序系列-第4部分 (Kriptofolio app series - Part 4) Dependency injection will signif ...

  4. winform防止sqlserver注入_ASP.NET Core 中的 依赖注入介绍

    ASP.NET Core 依赖注入 HomeController public class HomeController : Controller { private IStudentReposito ...

  5. 艾伟_转载:VS 2010 和 .NET 4.0 系列之《在ASP.NET 4 Web Forms中实现URL导向》篇

    本系列文章导航 VS 2010 和 .NET 4.0 系列之<ASP.NET 4 中的SEO改进 >篇 VS 2010 和 .NET 4.0 系列之<干净的Web.Config文件 ...

  6. .NET中的依赖注入

    .NET 依赖注入 依赖注入是什么 内置Log 使用拓展方法注册服务组(Register groups of services with extension methods) .NET框架提供的服务( ...

  7. ABP中的依赖注入思想

    在充分理解整个ABP系统架构之前首先必须充分了解ABP中最重要的依赖注入思想,在后面会具体举出一些实例来帮助你充分了解ABP中的依赖注入思想,在了解这个之前我们首先来看看什么是依赖注入?来看看维基百科 ...

  8. 转: 理解AngularJS中的依赖注入

    理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS依赖注入系统是如何运行的. Prov ...

  9. 理解AngularJS中的依赖注入

    作者 CraftsCoder 冷月无声 - 博客频道 - CSDN.NET http://blog.csdn.net/jaytalent/article/details/50986402 本文结合一些 ...

最新文章

  1. 基于机器视觉的智能人机交互技术
  2. linux文件管理相关操作
  3. html5游戏加载动画,HTML5 战场3游戏的加载指示动画
  4. hdu1.3.7 Crixalis's Equipment
  5. [iOS]MVVM-框架介绍
  6. CString与string、char*的区别和转换
  7. 使用ASP.NET Core 3.x 构建 RESTful API - 4.2 过滤和搜索
  8. 过了双十一之后的你。。| 今日最佳
  9. PCI总线的含义是什么?PCI总线的主要特点是什么?
  10. C#中异步多线程的常见用法
  11. 【Python3网络爬虫开发实战】1.3.2-Beautiful Soup的安装
  12. tomcat下如何才能运行shtml文件?
  13. Linux系统编程 -- 多线程间同步和互斥
  14. sp_configure
  15. 平稳时间序列模型的统计性质
  16. PS图层批量处理插件,支持Win、Mac系统
  17. 三相PWM整流器滞环电流控制仿真
  18. 1200兆路由器网速_1200m路由器有必要吗 只要我们选择5GHz频段就可
  19. 【sql】SQL3 查找当前薪水详情以及部门编号dept_no
  20. 今日恐慌与贪婪指数为18 恐慌程度有所缓解

热门文章

  1. Element.shadowRoot
  2. [Codeforces700E Cool Slogans]
  3. 思科AP-什么是COS AP?
  4. c/c++ new delete初探
  5. (转)yi_meng linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown区别
  6. 知道第一章计算机基础知识作业答案,大学计算机基础作业答案
  7. wi-fi共享大师免广告_如何保护Wi-Fi网络免受入侵
  8. 如何在Android主屏幕上添加热点快捷方式
  9. 循序渐进DB2(第2版)——DBA系统管理、运维与应用案例
  10. Java之品优购课程讲义_day20(5)