上一章主要介绍了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文件进行注入工作,Global需要实现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节点中添加system.webServer节点,如下所示:

<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("");
var stu2 = StuService.GetStuInfo("");
var stu3 = StuRepositoryImpl.GetStuInfo("");
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/1jUbf1pk2-bSybf9OfUh8Tw
提取码:24ki

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

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

ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用的更多相关文章

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

    话不多说,直入主题看我们的解决方案结构: 分别对上面的工程进行简单的说明: 1.TianYa.DotNetShare.Model:为demo的实体层 2.TianYa.DotNetShare.Repo ...

  2. ASP.NET MVC IOC依赖注入之Autofac系列开篇

    Autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 使用IOC,必须面向接口编程,所谓的面向接口编程,即程序中依赖于抽象,而不依赖于具体实现. 需要所有的业务逻辑 ...

  3. ASP.NET MVC实现依赖注入

    在java的spring中有自动注入功能,使得代码变得更加简洁灵活,所以想把这个功能移植到c#中,接下来逐步分析实现过程 1.使用自动注入场景分析 在asp.net mvc中,无论是什么代码逻辑分层, ...

  4. asp.net core ioc 依赖注入

    1.生命周期 内置的IOC有三种生命周期: Transient: Transient服务在每次被请求时都会被创建.这种生命周期比较适用于轻量级的无状态服务. Scoped: Scoped生命周期的服务 ...

  5. 007.ASP.NET MVC控制器依赖注入

    原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前 ...

  6. ASP.NET MVC IOC 之AutoFac

    ASP.NET MVC IOC 之AutoFac攻略 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天, ...

  7. 大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful) .net core 控制台程序使用依赖注入(Autofac)

    大比速:remoting.WCF(http).WCF(tcp).WCF(RESTful).asp.net core(RESTful) 近来在考虑一个服务选型,dotnet提供了众多的远程服务形式.在只 ...

  8. ASP.NET没有魔法——ASP.NET MVC IoC

    之前的文章介绍了MVC如何通过ControllerFactory及ControllerActivator创建Controller,而Controller又是如何通过ControllerBase这个模板 ...

  9. 浅谈(IOC)依赖注入与控制反转(DI)

    前言:参考了百度文献和https://www.cnblogs.com/liuqifeng/p/11077592.html以及http://www.cnblogs.com/leoo2sk/archive ...

随机推荐

  1. CSS | 圣杯布局、双飞翼布局 | 自适应三栏布局

    圣杯布局和双飞翼布局是前端工程师需要日常掌握的重要布局方式.两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局 虽然两者的实现方法略有差异,不过都遵循了以下要点: 1.两侧宽度固定 ...

  2. C++生成完全二叉树

    C++生成完全二叉树 2019-12-20 By Gauss 1.背景介绍 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的.对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都 ...

  3. (2019版本可用)Pycharm的安装,破解

    前言 python的操作工具pycharm,是专门用来写python语言的. 因为之前在网上找到了,但是太麻烦了,所以整理整理. pycharm安装 官网可以选择下载(pycharm最新版有可能破解不 ...

  4. 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(1.准备工作)

    本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...

  5. C#线程学习笔记四:线程同步

    本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/21/ThreadsSynchronous.html,记录一下学习过程以备后续查用.     ...

  6. C# get md5 from bytes

    static byte[] GetBytesFromDic(Dictionary<string,string> dic) { if(dic==null || !dic.Any()) { r ...

  7. 学习SQL注入---1

    开始接触SQL注入了,最开始根据网上的思路做了两道注入的题,但对于SQL注入如何实现,怎么一个流程还是不理解.后来,在网上查找了很多资料,现在一点点去理解. 1.利用sqlmap注入的时候,不是所有页 ...

  8. Hadoop_HDFS_02

    1. HDFS入门 1.1 HDFS基本概念 HDFS是Hadoop Distribute File System的简称, 意为: Hadoop分布式文件系统. 是Hadoop三大核心组件之一, 作为 ...

  9. IO测试工具 - 用于IO测试 ; linux benchmarks

    IO测试工具,用于磁盘IO测试,下面进行使用列表进行记录: iozone fio dd ioping iotop iostat bonnie++ crystalDisk Atto as-ssd-ben ...

  10. CentOS7 下nginx与PHP的安装与配置

    下载Nginx 1.在服务器上新建文件夹  /home/soft/ ; 2.cd /home/soft/    =>    执行命令下载Nginx    wget http://nginx.or ...