欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

程序员文章站 2022-03-22 14:36:46
本系列主要讲述IOC依赖注入之Autofac在ASP.NET MVC项目中以及在WebForm项目中的具体应用。 ......

上一章主要介绍了autofac在mvc当中的具体应用,本章我们将继续简单的介绍下autofac在普通的webform当中的使用。

ps:值得一提的是目前我还不知道webform页面的构造函数要如何注入,以下在webform页面将主要采用属性注入的方式。

接下来我们正式进入主题,在上一章的基础上我们再添加一个web项目tianya.dotnetshare.webdemo,首先看我们的解决方案

ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

本demo的web项目为asp.net web 应用程序(.net framework 4.5) 空web窗体,需要引用以下几个程序集:

1、tianya.dotnetshare.model 我们的实体层

2、tianya.dotnetshare.service 我们的服务层

3、tianya.dotnetshare.repository 我们的仓储层,正常我们的web项目是不应该使用仓储层的,此处我们引用是为了演示ioc依赖注入

4、autofac 依赖注入基础组件

5、autofac.web 依赖注入web的辅助组件

其中autofac和autofac.web可以从我们的nuget上引用,依次点击下载以下2个组件:

ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

打开我们的global.asax文件进行注入工作,需要实现icontainerprovideraccessor接口:

using system;
using system.collections.generic;
using system.io;
using system.linq;
using system.reflection;
using system.web;
using system.web.security;
using system.web.sessionstate;

using autofac;
using autofac.integration.web;
using tianya.dotnetshare.model;

namespace tianya.dotnetshare.webdemo
{
    public class global : system.web.httpapplication, icontainerprovideraccessor
    {
        /// <summary>
        /// 依赖注入containerprovider
        /// </summary>
        static icontainerprovider _containerprovider;

        /// <summary>
        /// 实现icontainerprovideraccessor接口
        /// </summary>
        public icontainerprovider containerprovider
        {
            get
            {
                return _containerprovider;
            }
        }

        protected void application_start(object sender, eventargs e)
        {
            autofacregister(); //autofac依赖注入
        }

        /// <summary>
        /// autofac依赖注入
        /// </summary>
        private void autofacregister()
        {
            var builder = new containerbuilder();

            //一次性注册所有实现了idependency接口的类
            type basetype = typeof(idependency);
            assembly[] assemblies = directory.getfiles(appdomain.currentdomain.relativesearchpath, "*.dll").select(assembly.loadfrom).toarray();
            builder.registerassemblytypes(assemblies)
                   .where(type => basetype.isassignablefrom(type) && !type.isabstract)
                   .asself().asimplementedinterfaces()
                   .propertiesautowired().instanceperlifetimescope();

            //设置依赖解析器
            _containerprovider = new containerprovider(builder.build());
        }
    }
}

接着需要配置一下我们的web.config,添加以下节点:

<configuration>
  
  <!--autofac依赖注入-->
  <system.webserver>
    <modules>
      <!-- this module handles disposal of the request lifetime scope. -->
      <add name="containerdisposal" type="autofac.integration.web.containerdisposalmodule, autofac.integration.web" precondition="managedhandler" />
      <!-- this module injects properties on web forms. you could also use the unsetpropertyinjectionmodule or a custom module. -->
      <add name="propertyinjection" type="autofac.integration.web.forms.propertyinjectionmodule, autofac.integration.web" precondition="managedhandler" />
    </modules>
  </system.webserver>
</configuration>

最后来看下我们webform页面

using system;

using tianya.dotnetshare.service;
using tianya.dotnetshare.repository;
using tianya.dotnetshare.repository.impl;

namespace tianya.dotnetshare.webdemo
{
    public partial class index : system.web.ui.page
    {
        /// <summary>
        /// 定义仓储层学生实现类对象
        /// </summary>
        public studentrepository sturepositoryimpl { get; set; }

        /// <summary>
        /// 定义仓储层学生抽象类对象
        /// </summary>
        public istudentrepository sturepository { get; set; }

        /// <summary>
        /// 通过属性注入,访问修饰符必须为public,否则会注入失败
        /// </summary>
        public istudentservice stuservice { get; set; }

        /// <summary>
        /// 页面加载
        /// </summary>
        /// <param name="sender">引发事件的源</param>
        /// <param name="e">处理事件所需的参数</param>
        protected void page_load(object sender, eventargs e)
        {
            var stu1 = sturepository.getstuinfo("10000");
            var stu2 = stuservice.getstuinfo("10001");
            var stu3 = sturepositoryimpl.getstuinfo("10002");
            string msg = $"学号:10000,姓名:{stu1.name},性别:{stu1.sex},年龄:{stu1.age}<br />";
            msg += $"学号:10001,姓名:{stu2.name},性别:{stu2.sex},年龄:{stu2.age}<br />";
            msg += $"学号:10002,姓名:{stu3.name},性别:{stu3.sex},年龄:{stu3.age}";

            response.write(msg);
        }
    }
}

至此,完成处理,接下来就是见证奇迹的时刻了,我们访问一下 /index.aspx,看看是否能返回学生信息

ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

可以发现,返回了学生的信息,说明我们注入成功了。

至此,我们的asp.net mvc ioc依赖注入之autofac系列就全部介绍完了,如果你觉得这篇文章对你有所帮助请记得点赞哦,谢谢!!!

demo源码:

链接:https://pan.baidu.com/s/1hcq3soe8lzhso3it-x9aqw 
提取码:586l

 

参考博文:https://www.cnblogs.com/fei686868/p/11001873.html

版权声明:如有雷同纯属巧合,如有侵权请及时联系本人修改,谢谢!!!