当前位置: 首页 > news >正文

建设行业信息管理系统网站邢台建设网站

建设行业信息管理系统网站,邢台建设网站,广州做网站星珀,网站建设电话销售说不需要一. IOC和DI 1. 通过Nuget引入Unity程序集。 PS:【版本#xff1a;5.8.6】 2. 新建DIFactory类#xff0c;用来读取Unity的配置文件并创建Unity容器#xff0c;需要注意的是DIFactory类需要声明成单例。 PS#xff1a;这里采用静态构造函数(必须是无参的)的形式来实现单…一. IOC和DI 1. 通过Nuget引入Unity程序集。 PS:【版本5.8.6】 2. 新建DIFactory类用来读取Unity的配置文件并创建Unity容器需要注意的是DIFactory类需要声明成单例。 PS这里采用静态构造函数(必须是无参的)的形式来实现单例MVC框架的那个框架采用的是 双iflock锁的形式实现的单例结果都一样。 代码分享 1 /// summary2 /// 依赖注入工厂单例的 采用静态构造函数3 /// 读取Unity的配置文件并创建Unity容器4 /// 需要引入程序集“System.Configuration”5 /// /summary6 public class DIFactory7 {8 private static IUnityContainer _Container null;9 static DIFactory() 10 { 11 //1. 固定的4行代码读取配置文件 12 ExeConfigurationFileMap fileMap new ExeConfigurationFileMap(); 13 fileMap.ExeConfigFilename Path.Combine(AppDomain.CurrentDomain.BaseDirectory CfgFiles\\UnityConfig.xml);//找配置文件的路径 14 Configuration configuration ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 15 UnityConfigurationSection section (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName); 16 //2. Unity层次的步骤 17 _Container new UnityContainer(); 18 //加载节点的名称为apiContainer 19 section.Configure(_Container, apiContainer); 20 } 21 22 /// summary 23 /// 对外开放函数,用来获取Unity容器 24 /// /summary 25 /// returns/returns 26 public static IUnityContainer GetContainer() 27 { 28 return _Container; 29 } 30 } 3. 新建UnityDependencyResolver类,用来自定义控制器实例化工厂. 特别注意该类这里实现的是IDependencyResolver接口来自WebApi下的程序集而非MVC所以和MVC下的写法有区别. 代码分享 1 public class UnityDependencyResolver : IDependencyResolver2 {3 private IUnityContainer _IUnityContainer null;4 public UnityDependencyResolver(IUnityContainer unityContainer)5 {6 this._IUnityContainer unityContainer;7 }8 9 /// summary 10 /// 获取单个服务 11 /// /summary 12 /// param nameserviceType/param 13 /// returns/returns 14 public object GetService(Type serviceType) 15 { 16 try 17 { 18 return this._IUnityContainer.Resolve(serviceType); 19 } 20 catch (ResolutionFailedException ex)//因为会累计构造多个对象很多是没有去扩展直接null就行 21 { 22 return null; 23 } 24 } 25 26 public IEnumerableobject GetServices(Type serviceType) 27 { 28 try 29 { 30 return this._IUnityContainer.ResolveAll(serviceType); 31 } 32 catch (ResolutionFailedException) 33 { 34 return new Listobject(); 35 } 36 } 37 38 public IDependencyScope BeginScope()//每次请求 39 { 40 var child this._IUnityContainer.CreateChildContainer(); 41 return new UnityDependencyResolver(child); 42 } 43 44 public void Dispose() 45 { 46 this._IUnityContainer.Dispose(); 47 } 48 } 4. 新建CfgFiles文件夹和UnityConfig.xml文件该xml文件需要改属性为“始终复制”。 代码分享 configurationconfigSectionssection nameunity typeMicrosoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration//configSectionsunity!-- unity容器配置注册节点--containerscontainer nameapiContainer!-- type中的两个参数分别是类型名称和DLL程序集的名称 --!-- mapTo中的两个参数分别是类型名称和DLL程序集的名称 --!--分析这里我们需要使用的是TestService,但不直接使用它而是使用它的接口即将【mapTo】里的类型注册给【type】里的类型--register typeWebApiBasic.Interface.ITestService,01-WebApiBasic mapToWebApiBasic.Service.TestService,01-WebApiBasic/register typeWebApiBasic.Interface.ITestService2,01-WebApiBasic mapToWebApiBasic.Service.TestService2,01-WebApiBasic//container/containers/unity /configuration 5. 在WebApiConfig文件中进行配置把webapi的DependencyResolver换成自己的Unity版本的 config.DependencyResolver new UnityDependencyResolver(DIFactory.GetContainer()); 6. 新建Service文件夹和Interface文件夹分别创建TestService类和ITestService接口并去UnityConfig.xml文件中进行注册(上述xml里已经注册好了)。 代码如下 1 public class TestService : ITestService 2 { 3 public string GetInfor() 4 { 5 return 我是ypf; 6 } 7 } 1 public interface ITestService 2 { 3 string GetInfor(); 4 } 7. 在控制器中进行构造函数的注入,注入TestService对象。 public class EighthController : ApiController{private ITestService _ITestService null;public EighthController(ITestService testService){this._ITestService testService;}[HttpGet]public string GetInfor(){var result _ITestService.GetInfor();return result;}} 8. 利用PostMan进行测试 http://localhost:2131/api/Eighth/GetInfor 测试成功。 二. AOP 1. 通过Nuget引入Unity.Interception程序集同时会自动把它依赖的Unity.Abstractions程序集引入。 PS【版本5.5.3】 2. 新增TestService2类和ITestService2接口用来测试AOP。 代码如下 1 public interface ITestService22 {3 string GetInfor2();4 }5 public class TestService2 : ITestService26 {7 public string GetInfor2()8 {9 return 我是ypf2; 10 } 11 } 3. 新建AOP文件夹并新建LogBeforeBehavior类实现IInterceptionBehavior接口在Invoke中写AOP相关的代码。 1 /// summary2 /// Unity为我们提供了一个IInterceptionBehavior接口需要实现这个接口3 /// 接口为我们提供了三个方式(GetRequiredInterfaces、Invoke、WillExecute)实现4 /// WillExecute表示是否执行该行为如果是false这个方法被调用时不会被捕捉。因为我们总是要执行的所以为true5 /// GetRequiredInterfaces将你想要的接口类型和行为联系起来我们暂时不需要所以返回Type.EmptyTypes6 /// Invoke执行方式接口,我们主要使用它7 /// /summary8 public class LogBeforeBehavior : IInterceptionBehavior9 { 10 public bool WillExecute 11 { 12 get { return true; } 13 } 14 15 public IEnumerableType GetRequiredInterfaces() 16 { 17 return Type.EmptyTypes; 18 } 19 20 public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext) 21 { 22 Console.WriteLine(我是方法执行前执行的业务); 23 24 //下面这句话表示这里执行方法 25 var result getNext()(input, getNext); 26 return result; 27 } 28 } 4. 在UnityConifig.xml文件中配置AOP相关的代码并且给TestService2注入的代码配置AOP相关的LogAopBehavior类。 代码分享 1 configuration2 configSections3 section nameunity typeMicrosoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration/4 /configSections5 unity6 !--Unity的AOP的相关配置--7 sectionExtension typeMicrosoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration/8 !-- unity容器配置注册节点--9 containers 10 container nameapiContainer 11 !--Unity的AOP的相关配置-- 12 extension typeInterception/ 13 !-- type中的两个参数分别是类型名称和DLL程序集的名称 -- 14 !-- mapTo中的两个参数分别是类型名称和DLL程序集的名称 -- 15 !-- 16 分析这里我们需要使用的是TestService,但不直接使用它而是使用它的接口即将【mapTo】里的类型注册给【type】里的类型 17 -- 18 register typeWebApiBasic.Interface.ITestService,01-WebApiBasic mapToWebApiBasic.Service.TestService,01-WebApiBasic/ 19 register typeWebApiBasic.Interface.ITestService2,01-WebApiBasic mapToWebApiBasic.Service.TestService2,01-WebApiBasic 20 interceptor typeInterfaceInterceptor/ 21 interceptionBehavior typeWebApiBasic.AOP.LogBeforeBehavior,01-WebApiBasic/ 22 /register 23 /container 24 /containers 25 /unity 26 /configuration 5. 用PostMan进行测试 http://localhost:2131/api/Eighth/GetInfor2 通过加断点发现执行方法前先进入了LogBeforeBehavior类中进行执行了。
http://www.zqtcl.cn/news/351313/

相关文章:

  • 网站后台重置密码怎么做360网站怎么做网址链接
  • 广告网站建设及推广网站建设怎样推广
  • 做网站使网页不居中滁州注册公司流程和费用
  • 做网站广告经营者个性定制网站
  • 网站开发 北京外包公司软件公司网站建设
  • 网络认证入口seo免费诊断
  • 十大知名博客网站郑州企业建站公司定制
  • 视频网站如何做引流网站首页 关键词
  • 建设机械网站精英大港做网站
  • 潜山网站建设公司哪里有wordpress相册投票插件
  • 网站建设制作过程网站添加支付功能
  • 网站制作字体即墨公司做网站
  • vue 做pc网站可以吗哪个网站买域名便宜
  • 做销售网站那家好金华住房与城乡建设部网站
  • apple私人免费网站怎么下载无锡网站建设技术
  • 移动应用网站开发阶段作业信息型网站有哪些
  • 监控直播网站开发网站建设与管理总结
  • 青岛城阳网站设计免费网站成品
  • 做服装外贸的网站ghost wordpress
  • 建设银行的网站为什么这么卡网页设计用啥软件
  • 电子商务 网站开发南阳网网站建设
  • 中小型企业网络拓扑图及配置株洲seo网站推广
  • 中国镇江网站如何搭建自己的网址
  • wordpress 自动广告seo搜索引擎优化原理
  • 区块链网站用vue.js做怎么样长春站建筑
  • 集团公司门户网站建设adsl做网站
  • 山东建设监理协会官方网站茂名建站公司模板
  • 烟台做网站案例创业网站推广怎么做
  • php项目网站建设方案书专做药材的网站有哪些
  • 网站表单模板营销型网站建设的5大技巧