Unity框架与ASP.NET MVC 5集成指南

在本文中,将学习如何在ASP.NET MVC 5应用程序中使用Unity框架来注册和解析依赖对象。首先,将简要了解Unity框架,然后创建一个演示应用程序以理解其与ASP.NET MVC 5的用法。

先决条件

最好具备MVC和Unity框架的基本知识。

Unity框架是什么

Unity是一个依赖注入(DI)框架。Unity框架的目的是将依赖注入到依赖对象中。将依赖注入到依赖对象中的过程称为依赖注入(DI)。有关更多信息,请查看。

演示应用程序概述

将使用ASP.NET MVC 5创建一个演示应用程序,并看看如何使用Unity注入依赖。众所周知,每个大型应用程序都有多个模块,并且可能使用服务。有时,一个服务使用另一个组件来实现其目标。如果需要,服务可能相互依赖。将尝试复制类似的情景,以理解Unity的强大功能。将创建一个简单的演示Web应用程序。应用程序将有两个模块,并将使用三种服务。

为了实现上述功能要求,让使用ASP.NET MVC 5创建一个名为RichBankDemoApp的应用程序。在同一个解决方案中,将添加一个类库项目,名为RichBank.Services。RichBank.Services将为RichBankDemoApp提供所需的服务。RichBank.Services不是实际的服务,而是实际服务的代表。RichBankDemoApp应用程序将使用CustomerService、AccountService和FundTransferService。因此,让在RichBank.Services项目中实现这三项服务。在这里,不针对任何数据库。出于演示目的,三项服务将提供硬编码数据。RichBank.Services项目结构如下所示。代码没有在这里描述,因为它很容易理解。

使用Areas分离模块

RichBankDemoApp应用程序将有两个名为AccountInfo和FundTransfer的模块。为了分离这两个模块,使用Areas。如果不熟悉ASP.NET MVC中的Areas,请查看。

使用Manage NuGet Packages,可以下载与ASP.NET MVC 5兼容的Unity 4.0.1版本。要下载Unity 4.0.1,请在解决方案资源管理器中右键单击References文件夹。单击“Manage NuGet Packages”选项。将打开Manage NuGet Packages窗口。转到在线,然后搜索Unity。Unity将可用,然后单击Install按钮,然后单击Close按钮。Manage NuGet Packages将自动下载并添加两个库的引用,分别是Microsoft.Practices.Unity和Microsoft.Practices.Unity.Configuration。

UnityConfig.cs文件将被添加到App_Start文件夹中。UnityConfig是一个静态类,它有一个名为RegisterComponents的静态方法。在这个方法中,需要注册所有所需的依赖项。

注册依赖项

打开App_Start中的UnityConfig.cs文件,在RegisterComponents方法中,需要注册所有依赖项。以下代码显示了如何注册依赖项。

public static void RegisterComponents() { var container = new UnityContainer(); container.RegisterType(new ContainerControlledLifetimeManager()); container.RegisterType(new ContainerControlledLifetimeManager()); container.RegisterType(new ContainerControlledLifetimeManager()); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); }

在上面的代码中,首先创建UnityContainer以注册依赖项。然后,将所有依赖项注册到容器中。在这里注册时,映射是在接口和实现该接口的类之间进行的。最后,使用SetResolver方法为应用程序设置Unity解析器。在这里,使用容器创建了一个新的UnityDependencyResolver并将其传递给SetResolver。

Account Info模块

Account Info模块将包含与账户相关的信息。要获取账户详细信息,AccountInformationController控制器将需要与AccountService交互。在AccountInformationController中,不会使用new关键字创建AccountService的实例,而是将IAccountService传递给AccountInformationController的构造函数。已经将此服务注册到UnityContainer中。因此,每当AccountInformationController被构造时,Unity将创建AccountService的实例,并且它将在AccountInformationController中可用。以下代码显示了AccountInformationController的实现。

public class AccountInformationController : Controller { private IAccountService accountService; public AccountInformationController(IAccountService accountService) { this.accountService = accountService; } public ActionResult Index() { // 出于演示目的,硬编码传递了CustomerId List allAccounts = accountService.GetAllAccountInfo(111); return View(allAccounts); } public ActionResult GetAccountDetail(string accountNumber) { Account accountDetail = accountService.GetAccountDetail(Convert.ToInt32(accountNumber)); return Json(accountDetail); } }

AccountInformation视图是使用HTML和jQuery代码创建的。完整的代码可以随下载的示例一起获得。以下图像显示了视图的布局。

资金转账模块

此模块提供了进行资金转账的选项。用户需要选择特定类型。将提供表单以执行资金转账。点击“转账金额”按钮后,填写的金额将转移到选定的账户号码。完成转账过程后,当前余额将显示在同一个表单上。要执行上述任务,FundTransferController将使用FundTransferService和AccountService。以下代码显示了FundTransferController的实现。

public class FundTransferController : Controller { private IFundTransferService fundTransferService; private IAccountService accountService; public FundTransferController(IFundTransferService fundTransferService, IAccountService accountService) { this.fundTransferService = fundTransferService; this.accountService = accountService; } public ActionResult Index() { var fundTransferTypesList = fundTransferService.GetFundTransferTypes(); return View(fundTransferTypesList); } public ActionResult PerformTransaction() { return View(); } ... ... }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485