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

做预算查价格的网站是哪个好可以做简单小活动的网站

做预算查价格的网站是哪个好,可以做简单小活动的网站,肇庆做网站公司,网站备案 网站目录 .NET IoC 容器#xff08;三#xff09;AutofacAutofacNuget 安装实现DI定义接口定义实现类依赖注入 注入方式构造函数注入 | 属性注入 | 方法注入注入实现 接口注册重复注册指定参数注册 生命周期默认生命周期单例生命周期每个周期范围一个生命周期 依赖配置Nuget配置文… 目录 .NET IoC 容器三AutofacAutofacNuget 安装实现DI定义接口定义实现类依赖注入 注入方式构造函数注入 | 属性注入 | 方法注入注入实现 接口注册重复注册指定参数注册 生命周期默认生命周期单例生命周期每个周期范围一个生命周期 依赖配置Nuget配置文件 AOPNuget安装定义接口、实现类定义切面容器配置 参考资料 .NET IoC 容器三Autofac Autofac Autofac 是一个用于 .NET 应用程序的依赖注入 (Dependency Injection, DI) 容器。它帮助开发人员管理对象的创建和生命周期使得依赖项的注入更加灵活和可维护。以下是 Autofac 的主要功能和特性概述 依赖注入 (Dependency Injection) Autofac 允许你通过构造函数、属性或方法注入依赖项。这样你可以轻松地将对象的依赖关系传递给需要它们的类从而提高代码的可测试性和可维护性。 模块化设计 (Modular Design) Autofac 支持模块化设计可以将相关的依赖项注册逻辑分组到模块中。这使得大型应用程序的配置更加简洁和易于管理。 生命周期管理 (Lifecycle Management) Autofac 提供多种对象生命周期管理方式例如单例 (Singleton)、每次请求 (Instance Per Dependency)、每个生命周期范围 (Instance Per Lifetime Scope) 等允许你精确控制对象的创建和销毁时机。 注册与解析 (Registration and Resolution) Autofac 通过流畅的 API 提供了多种注册组件的方式。你可以注册类型、实例、工厂方法甚至通过扫描程序集自动注册组件。此外Autofac 的解析功能支持构造函数参数注入、命名参数注入等高级特性。 支持 AOP (Aspect-Oriented Programming) Autofac 与 AOP 框架如 Castle Windsor集成支持横切关注点如日志记录、事务管理的处理从而使业务逻辑代码更加简洁。 集成支持 Autofac 与许多流行的 .NET 库和框架集成良好包括 ASP.NET Core、WCF、Web API、MVC 等。通过这些集成Autofac 可以轻松地管理 web 应用程序中的依赖项。 扩展性 Autofac 具有很高的扩展性可以通过自定义注册源、生命周期、解析器等方式扩展其功能以满足特定应用的需求。 Nuget 安装 实现DI 定义接口 internal interface IComputer { }internal interface IKeyboard { }internal interface IMouse { }internal interface IPerson {IComputer Computer { get; set; }IKeyboard Keyboard { get; set; }IMouse Mouse { get; set; }void Work(); }定义实现类 internal class ConstructBase {public ConstructBase() {Console.WriteLine(${this.GetType().Name} - 被构造了);} }internal class LenovoComputer : ConstructBase, IComputer {public LenovoComputer() : base() { } }internal class TogarKeyboard : ConstructBase, IKeyboard {public TogarKeyboard() : base() { } }internal class LogitechMouse : ConstructBase, IMouse {public LogitechMouse() : base() { } }internal class Programmer : ConstructBase, IPerson {public IComputer Computer { get; set; }public IKeyboard Keyboard { get; set; }public IMouse Mouse { get; set; }public Programmer(IComputer computer, IKeyboard keyboard, IMouse mouse) : base(){Computer computer;Keyboard keyboard;Mouse mouse;}public void Work(){Console.WriteLine(Programmers are building software...);} }依赖注入 var builder new ContainerBuilder(); builder.RegisterTypeLenovoComputer().AsIComputer(); builder.RegisterTypeTogarKeyboard().AsIKeyboard(); builder.RegisterTypeLogitechMouse().AsIMouse(); builder.RegisterTypeProgrammer().AsIPerson(); var container builder.Build(); IPerson programmer container.ResolveIPerson(); programmer.Work();输出 Zhy.IoC.Autofac.LenovoComputer - 被构造了 Zhy.IoC.Autofac.TogarKeyboard - 被构造了 Zhy.IoC.Autofac.LogitechMouse - 被构造了 Zhy.IoC.Autofac.Programmer - 被构造了 Programmers are building software...注入方式 构造函数注入 | 属性注入 | 方法注入 定义特性用来筛选属性注入 public class InjectPropertyAttribute : Attribute {}定义实现类 public class Gamer : ConstructBase, IPerson {public IComputer Computer { get; set; }[InjectProperty]public IKeyboard Keyboard { get; set; }public IMouse Mouse { get; set; }public Gamer(IComputer computer) : base(){Computer computer;}public void Inject(IMouse mouse){Mouse mouse;}public void Work(){Console.WriteLine(The player is playing...);} }注入实现 // 注入顺序与编码顺序无关构造函数注入 属性注入 方法注入 var builder new ContainerBuilder(); builder.RegisterTypeLenovoComputer().AsIComputer(); builder.RegisterTypeTogarKeyboard().AsIKeyboard(); builder.RegisterTypeLogitechMouse().AsIMouse(); builder.RegisterTypeGamer()// 方法注入.OnActivating(e {IMouse mouse e.Context.ResolveIMouse();e.Instance.Inject(mouse);})// 属性注入.PropertiesAutowired((g, o) g.Name Keyboard)// 构造函数注入.UsingConstructor(typeof(IComputer)).AsIPerson(); var container builder.Build(); IPerson gamer container.ResolveIPerson(); gamer.Work();输出 Zhy.IoC.Autofac.LenovoComputer - 被构造了 Zhy.IoC.Autofac.Gamer - 被构造了 Zhy.IoC.Autofac.TogarKeyboard - 被构造了 Zhy.IoC.Autofac.LogitechMouse - 被构造了 The player is playing...结果 注入顺序构造函数注入 属性注入 方法注入 接口注册 重复注册 var builder new ContainerBuilder(); builder.RegisterTypeLenovoComputer().AsIComputer(); builder.RegisterTypeTogarKeyboard().AsIKeyboard(); builder.RegisterTypeLogitechMouse().AsIMouse(); builder.RegisterTypeProgrammer().AsIPerson(); builder.RegisterTypeGamer()// 方法注入.OnActivating(e {IMouse mouse e.Context.ResolveIMouse();e.Instance.Inject(mouse);})// 属性注入.PropertiesAutowired((g, o) g.Name Keyboard)// 构造函数注入.UsingConstructor(typeof(IComputer)).AsIPerson(); var container builder.Build(); IPerson programmer container.ResolveIPerson(); programmer.Work();输出 Zhy.IoC.Autofac.LenovoComputer - 被构造了 Zhy.IoC.Autofac.Gamer - 被构造了 Zhy.IoC.Autofac.TogarKeyboard - 被构造了 Zhy.IoC.Autofac.LogitechMouse - 被构造了 The player is playing...调换Gamer和Programmer的注册顺序 var builder new ContainerBuilder(); builder.RegisterTypeLenovoComputer().AsIComputer(); builder.RegisterTypeTogarKeyboard().AsIKeyboard(); builder.RegisterTypeLogitechMouse().AsIMouse(); builder.RegisterTypeGamer()// 方法注入.OnActivating(e {IMouse mouse e.Context.ResolveIMouse();e.Instance.Inject(mouse);})// 属性注入.PropertiesAutowired((g, o) g.Name Keyboard)// 构造函数注入.UsingConstructor(typeof(IComputer)).AsIPerson(); builder.RegisterTypeProgrammer().AsIPerson(); var container builder.Build(); IPerson programmer container.ResolveIPerson(); programmer.Work();输出 Zhy.IoC.Autofac.LenovoComputer - 被构造了 Zhy.IoC.Autofac.TogarKeyboard - 被构造了 Zhy.IoC.Autofac.LogitechMouse - 被构造了 Zhy.IoC.Autofac.Programmer - 被构造了 Programmers are building software...结论 同一接口多次注册时后注册的会覆盖前面注册的若需要实现多重注册需要指定名称 var builder new ContainerBuilder(); builder.RegisterTypeLenovoComputer().AsIComputer(); builder.RegisterTypeTogarKeyboard().AsIKeyboard(); builder.RegisterTypeLogitechMouse().AsIMouse(); builder.RegisterTypeGamer()// 方法注入.OnActivating(e {IMouse mouse e.Context.ResolveIMouse();e.Instance.Inject(mouse);})// 属性注入.PropertiesAutowired((g, o) g.Name Keyboard)// 构造函数注入.UsingConstructor(typeof(IComputer)).NamedIPerson(person); builder.RegisterTypeProgrammer().NamedIPerson(programmer); var container builder.Build(); IPerson programmer container.ResolveNamedIPerson(programmer); IPerson person container.ResolveNamedIPerson(person); programmer.Work(); person.Work();输出 Zhy.IoC.Autofac.LenovoComputer - 被构造了 Zhy.IoC.Autofac.TogarKeyboard - 被构造了 Zhy.IoC.Autofac.LogitechMouse - 被构造了 Zhy.IoC.Autofac.Programmer - 被构造了 Zhy.IoC.Autofac.LenovoComputer - 被构造了 Zhy.IoC.Autofac.Gamer - 被构造了 Zhy.IoC.Autofac.TogarKeyboard - 被构造了 Zhy.IoC.Autofac.LogitechMouse - 被构造了 Programmers are building software... The player is playing...指定参数注册 修改接口 internal interface IMouse {string Type { get; set; } }修改实现类 internal class LogitechMouse : ConstructBase, IMouse {public LogitechMouse() : base() { }public LogitechMouse(string type) : base(){Type type;}public string Type { get; set; } }注入 var builder new ContainerBuilder(); builder.RegisterTypeLogitechMouse().WithParameter(type,502).AsIMouse(); var container builder.Build(); IMouse mouse container.ResolveIMouse(); Console.WriteLine(mouse type: mouse.Type);输出 Zhy.IoC.Autofac.LogitechMouse - 被构造了 mouse type: 502生命周期 Instance Per Dependency默认 每次请求组件时都会创建一个新的实例。这是默认的生命周期管理模式。 builder.RegisterTypeMyService().AsIMyService();Singleton 在整个容器生命周期内只有一个实例。 builder.RegisterTypeMyService().AsIMyService().SingleInstance();Instance Per Lifetime Scope 在每个生命周期范围内共享一个实例。每个生命周期范围都会创建一个新的实例但在该范围内共享该实例。 builder.RegisterTypeMyService().AsIMyService().InstancePerLifetimeScope();Instance Per Matching Lifetime Scope 在特定的生命周期范围内共享实例需要指定标记。 builder.RegisterTypeMyService().AsIMyService().InstancePerMatchingLifetimeScope(my-scope);Instance Per Request 通常用于 web 应用程序在每个 HTTP 请求期间共享一个实例。 builder.RegisterTypeMyService().AsIMyService().InstancePerRequest();Externally Owned 组件由外部代码管理生命周期Autofac 不会在容器释放时释放该实例。 builder.RegisterTypeMyService().AsIMyService().ExternallyOwned();Instance Per Dependency 每次依赖请求时都会创建一个新实例。 builder.RegisterTypeMyService().AsIMyService().InstancePerDependency();默认生命周期 var builder new ContainerBuilder(); builder.RegisterTypeLenovoComputer().AsIComputer(); var container builder.Build(); IComputer computer0 container.ResolveIComputer(); IComputer computer1 container.ResolveIComputer(); Console.WriteLine(computer0: computer0.GetHashCode()); Console.WriteLine(computer1: computer1.GetHashCode()); Console.WriteLine($computer0 computer1: {computer0 computer1});输出 Zhy.IoC.Autofac.LenovoComputer - 被构造了 Zhy.IoC.Autofac.LenovoComputer - 被构造了 computer0: 32347029 computer1: 22687807 computer0 computer1: False单例生命周期 var builder new ContainerBuilder(); builder.RegisterTypeLenovoComputer().AsIComputer().SingleInstance(); var container builder.Build(); IComputer computer0 container.ResolveIComputer(); IComputer computer1 container.ResolveIComputer(); Console.WriteLine(computer0: computer0.GetHashCode()); Console.WriteLine(computer1: computer1.GetHashCode()); Console.WriteLine($computer0 computer1: {computer0 computer1});输出 Zhy.IoC.Autofac.LenovoComputer - 被构造了 computer0: 32347029 computer1: 32347029 computer0 computer1: True每个周期范围一个生命周期 var builder new ContainerBuilder(); builder.RegisterTypeLenovoComputer().AsIComputer().InstancePerLifetimeScope(); var container builder.Build(); IComputer computer0 container.ResolveIComputer(); using (var scope container.BeginLifetimeScope()) {IComputer computer1 scope.ResolveIComputer();IComputer computer2 scope.ResolveIComputer();Console.WriteLine(computer0: computer0.GetHashCode());Console.WriteLine(computer1: computer1.GetHashCode());Console.WriteLine(computer2: computer2.GetHashCode());Console.WriteLine($computer0 computer1: {computer0 computer1});Console.WriteLine($computer1 computer2: {computer1 computer2}); }输出 Zhy.IoC.Autofac.LenovoComputer - 被构造了 Zhy.IoC.Autofac.LenovoComputer - 被构造了 computer0: 32347029 computer1: 22687807 computer2: 22687807 computer0 computer1: False computer1 computer2: True依赖配置 Nuget 配置文件 Json {components: [{type: Zhy.IoC.Autofac.LenovoComputer,Zhy.IoC.Autofac,services: [{type: Zhy.IoC.Core.IComputer,Zhy.IoC.Core}],autoActivate: true,instanceScope: singleinstance},{type: Zhy.IoC.Autofac.TogarKeyboard,Zhy.IoC.Autofac,services: [{type: Zhy.IoC.Core.IKeyboard,Zhy.IoC.Core}],autoActivate: true,instanceScope: singleinstance},{type: Zhy.IoC.Autofac.LogitechMouse,Zhy.IoC.Autofac,services: [{type: Zhy.IoC.Core.IMouse,Zhy.IoC.Core}],parameters: {places: 4},autoActivate: true,instanceScope: singleinstance},{type: Zhy.IoC.Autofac.Programmer,Zhy.IoC.Autofac,services: [{type: Zhy.IoC.Core.IPerson,Zhy.IoC.Core}],autoActivate: true,instanceScope: singleinstance}] }XML ?xml version1.0 encodingutf-8 ? autofaccomponents name0typeZhy.IoC.Autofac.LenovoComputer,Zhy.IoC.Autofac/typeservices name0 typeZhy.IoC.Core.IComputer,Zhy.IoC.Core //componentscomponents name1typeZhy.IoC.Autofac.TogarKeyboard,Zhy.IoC.Autofac/typeservices name0 typeZhy.IoC.Core.IKeyboard,Zhy.IoC.Core //componentscomponents name2typeZhy.IoC.Autofac.LogitechMouse,Zhy.IoC.Autofac/typeservices name0 typeZhy.IoC.Core.IMouse,Zhy.IoC.Core //componentscomponents name3typeZhy.IoC.Autofac.Programmer,Zhy.IoC.Autofac/typeservices name0 typeZhy.IoC.Core.IPerson,Zhy.IoC.Core //components /autofac调用 var config new ConfigurationBuilder(); config.AddJsonFile(DI-Autofac.json); // config.AddXmlFile(DI-Autofac.xml); var module new ConfigurationModule(config.Build()); var builder new ContainerBuilder(); builder.RegisterModule(module); var container builder.Build(); IPerson programmer container.ResolveIPerson(); programmer.Work();输出 Zhy.IoC.Autofac.LenovoComputer - 被构造了 Zhy.IoC.Autofac.TogarKeyboard - 被构造了 Zhy.IoC.Autofac.LogitechMouse - 被构造了 Zhy.IoC.Autofac.Programmer - 被构造了 Programmers are building software...AOP Nuget安装 定义接口、实现类 public interface IMyService {void DoWork(); }public void DoWork() {Console.WriteLine(Doing work...); }定义切面 using Castle.DynamicProxy;public class LoggingInterceptor : IInterceptor {public void Intercept(IInvocation invocation){Console.WriteLine($Invoking method {invocation.Method.Name} at {DateTime.Now});invocation.Proceed();Console.WriteLine($Method {invocation.Method.Name} has completed at {DateTime.Now});} }容器配置 var builder new ContainerBuilder(); builder.Register(c new LoggingInterceptor()); builder.RegisterTypeMyService().AsIMyService().EnableInterfaceInterceptors().InterceptedBy(typeof(LoggingInterceptor)); var container builder.Build(); var service container.ResolveIMyService(); service.DoWork();输出 Invoking method DoWork at 2024/5/30 16:49:34 Doing work... Method DoWork has completed at 2024/5/30 16:49:34参考资料 IOC容器之Unity与AutoFac_unity autofac-CSDN博客 Autofac/src/Autofac at develop · autofac/Autofac (github.com) 控制容器的反转和依赖关系注入模式 (martinfowler.com)
文章转载自:
http://www.morning.bdgb.cn.gov.cn.bdgb.cn
http://www.morning.ypbdr.cn.gov.cn.ypbdr.cn
http://www.morning.pwggd.cn.gov.cn.pwggd.cn
http://www.morning.baohum.com.gov.cn.baohum.com
http://www.morning.blqsr.cn.gov.cn.blqsr.cn
http://www.morning.zrmxp.cn.gov.cn.zrmxp.cn
http://www.morning.fglth.cn.gov.cn.fglth.cn
http://www.morning.wdwfm.cn.gov.cn.wdwfm.cn
http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn
http://www.morning.jokesm.com.gov.cn.jokesm.com
http://www.morning.mfct.cn.gov.cn.mfct.cn
http://www.morning.mwhqd.cn.gov.cn.mwhqd.cn
http://www.morning.jrqw.cn.gov.cn.jrqw.cn
http://www.morning.jhrlk.cn.gov.cn.jhrlk.cn
http://www.morning.nzwp.cn.gov.cn.nzwp.cn
http://www.morning.yhrfg.cn.gov.cn.yhrfg.cn
http://www.morning.yrccw.cn.gov.cn.yrccw.cn
http://www.morning.yhwxn.cn.gov.cn.yhwxn.cn
http://www.morning.pynzj.cn.gov.cn.pynzj.cn
http://www.morning.mbmh.cn.gov.cn.mbmh.cn
http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn
http://www.morning.mbfkt.cn.gov.cn.mbfkt.cn
http://www.morning.cfccp.cn.gov.cn.cfccp.cn
http://www.morning.tsmxh.cn.gov.cn.tsmxh.cn
http://www.morning.jqbpn.cn.gov.cn.jqbpn.cn
http://www.morning.fqyxb.cn.gov.cn.fqyxb.cn
http://www.morning.kzrg.cn.gov.cn.kzrg.cn
http://www.morning.ubpsa.cn.gov.cn.ubpsa.cn
http://www.morning.tqjwx.cn.gov.cn.tqjwx.cn
http://www.morning.kybpj.cn.gov.cn.kybpj.cn
http://www.morning.frsbf.cn.gov.cn.frsbf.cn
http://www.morning.ntgrn.cn.gov.cn.ntgrn.cn
http://www.morning.glnfn.cn.gov.cn.glnfn.cn
http://www.morning.cfybl.cn.gov.cn.cfybl.cn
http://www.morning.cthkh.cn.gov.cn.cthkh.cn
http://www.morning.dwyyf.cn.gov.cn.dwyyf.cn
http://www.morning.drfcj.cn.gov.cn.drfcj.cn
http://www.morning.zgpgl.cn.gov.cn.zgpgl.cn
http://www.morning.nzms.cn.gov.cn.nzms.cn
http://www.morning.xmttd.cn.gov.cn.xmttd.cn
http://www.morning.qsbcg.cn.gov.cn.qsbcg.cn
http://www.morning.qrsrs.cn.gov.cn.qrsrs.cn
http://www.morning.hrkth.cn.gov.cn.hrkth.cn
http://www.morning.mrxgm.cn.gov.cn.mrxgm.cn
http://www.morning.qqhfc.cn.gov.cn.qqhfc.cn
http://www.morning.qcsbs.cn.gov.cn.qcsbs.cn
http://www.morning.pmmrb.cn.gov.cn.pmmrb.cn
http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn
http://www.morning.bkppb.cn.gov.cn.bkppb.cn
http://www.morning.rcttz.cn.gov.cn.rcttz.cn
http://www.morning.gxhqt.cn.gov.cn.gxhqt.cn
http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn
http://www.morning.xzrbd.cn.gov.cn.xzrbd.cn
http://www.morning.coffeedelsol.com.gov.cn.coffeedelsol.com
http://www.morning.srmpc.cn.gov.cn.srmpc.cn
http://www.morning.rfpb.cn.gov.cn.rfpb.cn
http://www.morning.mltsc.cn.gov.cn.mltsc.cn
http://www.morning.qlsyf.cn.gov.cn.qlsyf.cn
http://www.morning.txnqh.cn.gov.cn.txnqh.cn
http://www.morning.lblsx.cn.gov.cn.lblsx.cn
http://www.morning.jftl.cn.gov.cn.jftl.cn
http://www.morning.ydrn.cn.gov.cn.ydrn.cn
http://www.morning.jpnw.cn.gov.cn.jpnw.cn
http://www.morning.jtszm.cn.gov.cn.jtszm.cn
http://www.morning.qpnb.cn.gov.cn.qpnb.cn
http://www.morning.mggwr.cn.gov.cn.mggwr.cn
http://www.morning.xnlj.cn.gov.cn.xnlj.cn
http://www.morning.bnqcm.cn.gov.cn.bnqcm.cn
http://www.morning.sfwcb.cn.gov.cn.sfwcb.cn
http://www.morning.kzcfp.cn.gov.cn.kzcfp.cn
http://www.morning.sbncr.cn.gov.cn.sbncr.cn
http://www.morning.ydryk.cn.gov.cn.ydryk.cn
http://www.morning.pcgmw.cn.gov.cn.pcgmw.cn
http://www.morning.lylkh.cn.gov.cn.lylkh.cn
http://www.morning.nwbnt.cn.gov.cn.nwbnt.cn
http://www.morning.nlryq.cn.gov.cn.nlryq.cn
http://www.morning.ptqbt.cn.gov.cn.ptqbt.cn
http://www.morning.grryh.cn.gov.cn.grryh.cn
http://www.morning.yhywx.cn.gov.cn.yhywx.cn
http://www.morning.qnrpj.cn.gov.cn.qnrpj.cn
http://www.tj-hxxt.cn/news/258075.html

相关文章:

  • 东莞网站优化方法有哪些汉川网站推广服务
  • 家用网络建网站网页制作工具分为哪两类
  • 没有网站可以域名备案吗河北涿州建设局网站
  • 常德建设网站多少钱西安网站建设瑞信
  • 淘宝客为什么做网站谷德设计网百度百科
  • 免费建站模板网站项目策划书模板范文
  • 三峡建设管理有限公司网站自己做了个网站
  • 如何做网站效果更好手机网站页面制作
  • 唐山做网站上海城隍庙小吃推荐
  • 北京营销型网站制作做程序的网站
  • 公司网站怎么发布文章做电商网站公司简介
  • 分析公司网站的开发策略个人flash网站
  • 网站建设的主要作用有没有电脑做兼职的网站
  • 大学 生免费商业网站设计疾控中心24小时咨询电话
  • 蒙文网站建设情况汇报常用网站图标
  • 网站的设计路线网站建设需求表
  • 网站建设域名注册邢台做网站推广的公司
  • 网站实用性扬州网站建设suteng
  • 微信公众号登录入口手机版乐清网站优化
  • 高端企业门户网站建设费用广州网站设计推荐柚米
  • 中国建设银银行招聘网站营销企业网站建设
  • 为什么做金融网站犯法wordpress能不能导入html
  • 检察院前期网站建设网站上面关于我们要怎么填写
  • 网站软文推广范文百度如何搜索网址
  • 学校网站设计杭州建设培训中心网站
  • 做网站不会框架主流的网站开发技术
  • 网站服务器租用一年多少钱啊莱芜都市网人才网
  • 可以做免费广告的网站有哪些中国联通与腾讯设立
  • 潍坊网站制作案例汕头金平区
  • 网站的虚拟主机到期网站建设费入