依赖注入技术就是将一个对象注入到一个需要它的对象中,同时它也是控制反转的一种实现,显而易见,这样可以实现对象之间的解耦并且更方便测试和维护,依赖注入的原则早已经指出了,应用程序的高层模块不依赖于低层模块,而应该统一依赖于抽象或者接口。
在 .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 做如下设置。
1
2
3
4
5
|
< 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
命令行工具输入以下命令:
1
|
dotnet add package AspNet.WebFormsDependencyInjection.Unity |
创建实体 和 接口
现在创建一个名为 Author 实体类 和 IAuthorRepository 接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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 接口,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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容器。
1
|
var container = this .AddUnity(); |
然后在 Application_Start 事件中进行对象的 依赖配置,如下代码所示:
1
|
container.RegisterType<IAuthorRepository, AuthorRepository>(); |
对了,记的引入一下如下两个命名空间。
- AspNet.WebFormsDependencyInjection.Unity
- Unity
下面是 Global 类的完整代码,仅供参考。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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 使用依赖注入
现在容器,对象依赖都配置好了,接下来怎么在 Page 中用呢? 可以参考下面的代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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 中使用依赖注入可以轻松创建对象,然后在运行时获取依赖,可让你轻松构建灵活,松散的应用程序。
以上就是在ASP.Net Web Forms中使用依赖注入的步骤的详细内容,更多关于ASP.Net Web Forms中使用依赖注入的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/ireadme/p/14543095.html