马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

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

[复制链接]
查看2706 | 回复0 | 2019-8-13 18:52:14 | 显示全部楼层 |阅读模式
   上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的利用。   
   PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在WebForm页面将主要采用属性注入的方式。   
   接下来我们正式进入主题,在上一章的底子上我们再添加一个web项目TianYa.DotNetShare.WebDemo,首先看我们的解决方案   
   <div align="center"> 185511neas9ixjvfec5e57.png </div>   
   本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个组件:   
   <div align="center"> 185512tt5zjjqhjt2225td.png </div>   
   接着打开我们的Global.asax文件进行注入工作,Global需要实现IContainerProviderAccessor接口,如下所示:   
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Web;
  7. using System.Web.Security;
  8. using System.Web.SessionState;
  9. using Autofac;
  10. using Autofac.Integration.Web;
  11. using TianYa.DotNetShare.Model;
  12. namespace TianYa.DotNetShare.WebDemo
  13. {
  14.     public class Global : System.Web.HttpApplication, IContainerProviderAccessor
  15.     {
  16.         /// <summary>
  17.         /// 依赖注入ContainerProvider
  18.         /// </summary>
  19.         static IContainerProvider _containerProvider;
  20.         /// <summary>
  21.         /// 实现IContainerProviderAccessor接口
  22.         /// </summary>
  23.         public IContainerProvider ContainerProvider
  24.         {
  25.             get
  26.             {
  27.                 return _containerProvider;
  28.             }
  29.         }
  30.         protected void Application_Start(object sender, EventArgs e)
  31.         {
  32.             AutofacRegister(); //Autofac依赖注入
  33.         }
  34.         /// <summary>
  35.         /// Autofac依赖注入
  36.         /// </summary>
  37.         private void AutofacRegister()
  38.         {
  39.             var builder = new ContainerBuilder();
  40.             //一次性注册所有实现了IDependency接口的类
  41.             Type baseType = typeof(IDependency);
  42.             Assembly[] assemblies =
  43.                 Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
  44.             builder.RegisterAssemblyTypes(assemblies)
  45.                    .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
  46.                    .AsSelf().AsImplementedInterfaces()
  47.                    .PropertiesAutowired().InstancePerLifetimeScope();
  48.             //设置依赖解析器
  49.             _containerProvider = new ContainerProvider(builder.Build());
  50.         }
  51.     }
  52. }
复制代码

   然后需要配置一下我们的Web.config,在configuration节点中添加system.webServer节点,如下所示:   
  1. <configuration>
  2.   
  3.   <!--Autofac依赖注入-->
  4.   <system.webServer>
  5.     <modules>
  6.       <!-- This module handles disposal of the request lifetime scope. -->
  7.       <add name="ContainerDisposal" type="Autofac.Integration.Web.ContainerDisposalModule, Autofac.Integration.Web" preCondition="managedHandler" />
  8.       <!-- This module injects properties on web forms. You could also use the UnsetPropertyInjectionModule or a custom module. -->
  9.       <add name="PropertyInjection" type="Autofac.Integration.Web.Forms.PropertyInjectionModule, Autofac.Integration.Web" preCondition="managedHandler" />
  10.     </modules>
  11.   </system.webServer>
  12. </configuration>
复制代码

   末了来看下我们WebForm页面   
  1. using System;
  2. using TianYa.DotNetShare.Service;
  3. using TianYa.DotNetShare.Repository;
  4. using TianYa.DotNetShare.Repository.Impl;
  5. namespace TianYa.DotNetShare.WebDemo
  6. {
  7.     public partial class Index : System.Web.UI.Page
  8.     {
  9.         /// <summary>
  10.         /// 定义仓储层学生实现类对象
  11.         /// </summary>
  12.         public StudentRepository StuRepositoryImpl { get; set; }
  13.         /// <summary>
  14.         /// 定义仓储层学生抽象类对象
  15.         /// </summary>
  16.         public IStudentRepository StuRepository { get; set; }
  17.         /// <summary>
  18.         /// 通过属性注入,访问修饰符必须为public,否则会注入失败
  19.         /// </summary>
  20.         public IStudentService StuService { get; set; }
  21.         /// <summary>
  22.         /// 页面加载
  23.         /// </summary>
  24.         /// <param name="sender">引发事件的源</param>
  25.         /// <param name="e">处理事件所需的参数</param>
  26.         protected void Page_Load(object sender, EventArgs e)
  27.         {
  28.             var stu1 = StuRepository.GetStuInfo("10000");
  29.             var stu2 = StuService.GetStuInfo("10001");
  30.             var stu3 = StuRepositoryImpl.GetStuInfo("10002");
  31.             string msg = $"学号:10000,姓名:{stu1.Name},性别:{stu1.Sex},年龄:{stu1.Age}<br />";
  32.             msg += $"学号:10001,姓名:{stu2.Name},性别:{stu2.Sex},年龄:{stu2.Age}<br />";
  33.             msg += $"学号:10002,姓名:{stu3.Name},性别:{stu3.Sex},年龄:{stu3.Age}";
  34.             Response.Write(msg);
  35.         }
  36.     }
  37. }
复制代码

   至此,完成处理,接下来就是见证奇迹的时刻了,我们访问一下 /index.aspx,看看是否能返回学生信息   
   <div align="center"> 185512xri75n5f3n24l788.png </div>   
   可以发现,返回了学生的信息,说明我们注入乐成了。   
   至此,我们的ASP.NET MVC IOC依赖注入之Autofac系列就全部介绍完了,如果你以为这篇文章对你有所帮助请记得点赞哦,谢谢!!!   
   demo源码:   
  1. 链接:https://pan.baidu.com/s/1jUbf1pk2-bSybf9OfUh8Tw
  2. 提取码:24ki
复制代码

      
   参考博文:https://www.cnblogs.com/fei686868/p/11001873.html   
   免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则