依赖注入是一种将一个对象(依赖项)传递给需要它的另一个对象的技术。 依赖注入是控制原理颠倒的一种实现,它促进了松耦合,并促进了可测试性和维护性。 依赖项注入原理指出,应用程序中的高级模块不应依赖于低级模块。 相反,两者都应依赖抽象。
.NET Framework 4.7.2中引入了对依赖项注入的支持。 此支持使您可以利用ASP.Net Web Forms应用程序中依赖项注入的好处。 本文讨论了如何在ASP.Net Web窗体中使用依赖项注入。
创建一个ASP.Net Web窗体项目
首先,让我们在Visual Studio中创建一个ASP.Net Core项目。 假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建新的ASP.Net Web窗体项目。
- 启动Visual Studio 2019 IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.Net Web应用程序(.Net Framework)”。
- 确保在屏幕底部的下拉控件中将.Net Framework版本指定为“ .Net Framework 4.7.2”。
- 单击创建。
- 在接下来显示的“创建新的ASP.Net Web应用程序”窗口中,选择“ Web窗体”作为项目模板。
- 确保未选中“ Docker支持”,“ MVC”和“ Web API”复选框,因为我们此处将不使用这些功能。
- 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
- 单击创建。
这将在Visual Studio中创建一个新的ASP.Net Web窗体项目。 我们将在以下各节中使用该项目来演示如何在ASP.Net Web Forms应用程序中进行依赖项注入。
在ASP.Net Web窗体中使用依赖项注入之前,需要确保您的项目面向.Net Framework 4.7.2或更高版本。 如果在早期版本的.Net Framework中创建了项目,则可以将项目重新定位到.Net Framework 4.7.2。 您可以通过编辑项目属性或通过在web.config文件中指定目标框架来执行此操作,如下所示。
<system.web>
<compilation debug="true" targetFramework="4.7.2" />
<httpRuntime targetFramework="4.7.2" />
...
</system.web>
下一步是安装AspNet.WebFormsDependencyInjection.Unity NuGet包。 选择在上一节中创建的项目,然后右键单击并通过NuGet软件包管理器安装AspNet.WebFormsDependencyInjection.Unity。 接受安装过程中可能会提示您的任何许可协议。 或者,您也可以通过在NuGet软件包管理器控制台中输入以下命令来安装此软件包。
Install-Package AspNet.WebFormsDependencyInjection.Unity
在ASP.Net Web窗体中创建实体类和接口
首先,让我们创建以下名为Author的实体类。
public class Author
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
接下来,我们将创建一个名为IAuthorRepository的接口,并插入以下代码。
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();
}
}
创建一个容器并注册类型
假设您如上所述在项目中安装了必要的NuGet软件包,下一步是创建Unity依赖项注入容器并注册我们要使用的类型。 以下代码可用于创建Unity容器。
var container = this.AddUnity();
您可以使用Unity容器很容易地在Application_Start事件处理程序中解析对对象的依赖关系,如以下代码片段所示。
container.RegisterType<IAuthorRepository, AuthorRepository>();
请注意,您必须在应用程序中包含以下两个名称空间,以上代码才能起作用。
- AspNet.WebFormsDependencyInjection.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 startup
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
在ASP.Net Web表单中使用依赖项注入
要利用Web窗体中的依赖项注入,可以使用构造函数注入,如下面的代码片段所示。
public partial class _Default : Page
{
private IAuthorRepository _authorRepository;
protected void Page_Load(object sender, EventArgs e)
{
}
public _Default(IAuthorRepository authorRepository)
{
_authorRepository = authorRepository;
}
}
注意使用参数构造函数在运行时传递依赖关系。
使用.Net Framework 4.7.2,可以通过Unity在ASP.Net Web窗体应用程序中使用依赖项注入。 Unity Application Block是轻量级的依赖项注入容器。 您可以在ASP.Net页面,控件,处理程序,模块等中使用依赖项注入。利用ASP.Net Web窗体中的依赖项注入来简化对象的创建,在运行时传递依赖项以及构建灵活的,松散耦合的应用程序。
From: https://www.infoworld.com/article/3397003/how-to-use-dependency-injection-in-aspnet-web-forms.html