当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

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

2019年08月12日  | 移动技术网IT编程  | 我要评论

命运女神之游戏人间,怎么把qq秀弄成空白,耀月风华 网王 东邦

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

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

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

本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个组件:

打开我们的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系列就全部介绍完了,如果你觉得这篇文章对你有所帮助请记得点赞哦,谢谢!!!

demo源码:

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

 

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网