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

上一章主要介绍了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("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/1jUbf1pk2-bSybf9OfUh8Tw
提取码:24ki

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

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

原文地址:https://www.cnblogs.com/xyh9039/p/11337352.html

时间: 2024-12-15 00:04:36

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

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

Autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 使用IOC,必须面向接口编程,所谓的面向接口编程,即程序中依赖于抽象,而不依赖于具体实现. 需要所有的业务逻辑尽量编写在服务层中,控制器层等不直接调用数据库上下文对象,如此,在一定程度上将各个操作层面区分开,更好的达到解耦的目的. 约定:控制器中不再调用数据库上下文对象,只在服务层中的具体实现调用. Autofac的生命周期可参考博文:https://blog.csdn.net/linshichen/art

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

原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前言:在这篇文章中,我将通过一个demo,直截了当地说明依赖注入在MVC框架中的使用. 内容列表: 1.介绍 2.为什么使用控制器依赖注入 3.控制器静态结构 4.自定义控制器 5.Framework中控制器的创建 6.为什么使用控制器工厂模式 7.控制器工厂模式 7.1.目标1 7.2.目标2 8.

【转】007.ASP.NET MVC控制器依赖注入

原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前言:在这篇文章中,我将通过一个demo,直截了当地说明依赖注入在MVC框架中的使用. 内容列表: 1.介绍 2.为什么使用控制器依赖注入 3.控制器静态结构 4.自定义控制器 5.Framework中控制器的创建 6.为什么使用控制器工厂模式 7.控制器工厂模式 7.1.目标1 7.2.目标2 8.

MVC IOC 依赖注入

需要引用如下: IDependencyResolver->System.Web.Mvc.dll IUnityContainer->Microsoft.Practices.Unity.dll Global.asax 追加如下方法 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(

ASP.NET Core-ActionFilter实现依赖注入(ServiceFilterAttribute 、TypeFilterAttribute) 【转】

一.简介 前几篇文章都是讲ASP.NET Core MVC中的依赖注入(DI)与扩展点的,也许大家都发现在ASP.NET CORE中所有的组件都是通过依赖注入来扩展的,而且面向一组功能就会有一组接口或抽象工厂来扩展功能,就如IControllerActivator这样的功能点在上篇文章(查看.NET Core源代码通过Autofac实现依赖注入到Controller属性)中也提到了,今天我们主要介绍一个大类似的扩展点,ASP.NET Core MVC中为我们提供了新的机制为Action Filt

ASP.NET MVC IOC 之Ninject攻略

一.为什么要使用Ninject? 很多其它类型的IOC容器过于依赖配置文件,老是配置,总感觉有点不爽,而且要使用assembly-qualified名称(也就是类型的全名)来进行定义,稍不注意就会因为打错字而令整个程序崩掉.Ninject是一个快如闪电.超轻量级的基于.Net平台的IOC容器,主要用来解决程序中模块的耦合问题,它的目的在于做到最少配置.因此如果你不喜欢配置,不喜欢重量级IOC框架,那么就用小苹果Ninject吧! 二.Ninject的使用 首先你必须获取Ninject,其官网下载

ASP.NET MVC IOC之Unity攻略

一.你知道IOC与DI吗? 1.IOC(Inversion of Control )——控制反转 即依赖对象不在被依赖模块的类中直接通过new来获取 先看看下面这段代码的问题~ public class SqlServerDal { public void Delete() { Console.WriteLine("删除表中某个订单信息!"); } } public class Order { private readonly SqlServerDal dal = new SqlSer

浅析依赖注入框架Autofac的使用

Autofac是一款IOC框架,比起Spring.NET,Unity,Castle等等框架,它很轻量级且性能也很高,下面小编给大家介绍下依赖注入框架Autofac的使用. 下面通过代码给大家分享下依赖注入框架Autofac的使用,具体如下所示:  Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的. 1)解压它的压缩包,主要看到Autofac.dll,Autofac.Configuration.dll,

MVC Castle依赖注入实现代码

1.MVc 实现依赖注入 public class WindsorControllerFactory : DefaultControllerFactory { private readonly IKernel _kernel; public WindsorControllerFactory(IKernel kernel) { _kernel = kernel; } protected override IController GetControllerInstance(System.Web.Ro