关于.net:如何在-ASPNet-Web-Forms-中使用依赖注入

8次阅读

共计 2461 个字符,预计需要花费 7 分钟才能阅读完成。

依赖注入技术就是将一个对象注入到一个须要它的对象中,同时它也是管制反转的一种实现,不言而喻,这样能够实现对象之间的解耦并且更不便测试和保护,依赖注入的准则早曾经指出了,应用程序的高层模块不依赖于低层模块,而应该对立依赖于形象或者接口。

.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 startup
            RouteConfig.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/art…

更多高质量干货:参见我的 GitHub: csharptranslate

正文完
 0