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

企业网站 合同做论坛网站如何赚钱的

企业网站 合同,做论坛网站如何赚钱的,女装网站建设规划,北京建设监理协会网站有些编码套路是公认的#xff0c;大家都参照其编写符合可观赏性的代码#xff0c;那就是设计模式现在.NETcore 默认提供了DI功能#xff0c;那我想设计一个全局的引擎类#xff0c;进行注入服务、解析服务、配置中间件。并且要求该引擎类全局唯一#xff0c;其他地方不能进… 有些编码套路是公认的大家都参照其编写符合可观赏性的代码那就是设计模式现在.NETcore 默认提供了DI功能那我想设计一个全局的引擎类进行注入服务、解析服务、配置中间件。并且要求该引擎类全局唯一其他地方不能进行实例化。那单例模式就派上用场了。单例模式官方定义确保某一个类只有一个实例而且自行实例化并向整个系统提供这个实例这个类成为单例类它提供全局访问的方法。伪代码实现需求 public class AAEngine { private static AAEngine aAEngine null; private AAEngine() { } //获取实例 public static AAEngine GetInstance() { if (aAEngine null) { aAEngine new AAEngine(); } return aAEngine; } //添加服务到容器 public void ConfigureService() { Console.WriteLine(添加服务到容器); } //添加中间件到请求管道 public void ConfigureRequestPipeline() { Console.WriteLine(添加中间件到请求管道); } //解析服务 public void ResolveT() where T : class { Console.WriteLine(解析服务); } }在Main函数中调用//单例模式 static void runSingleton() { var aAEngine AAEngine.GetInstance(); aAEngine.ConfigureService(); aAEngine.ConfigureRequestPipeline(); Console.WriteLine(Oh yeah 单例模式! ); }输出小结从实例代码中我们看到构造函数设置了级别为private这样可以防止外部进行new实例化外部可以通过GetInstance方法获取实例对象。实例代码其实是有点瑕疵的在多线程的情况下会违背单例的初衷我们下面进行如何解决这个问题。突然脑海中闪现出曾经的面试场景饿汉式单例和懒汉式单例或许对问题有所有帮助饿汉式单例饿汉试单例是在类加载的时候就已经创建了对象。代码如下public class AAEngine1 { private static AAEngine1 aAEngine new AAEngine1(); private AAEngine1() { } //获取实例 public static AAEngine1 GetInstance() { return aAEngine; } //添加服务到容器 public void ConfigureService() { Console.WriteLine(添加服务到容器); } //添加中间件到请求管道 public void ConfigureRequestPipeline() { Console.WriteLine(添加中间件到请求管道); } //解析服务 public void ResolveT() where T : class { Console.WriteLine(解析服务); } }小结在类被加载时静态变量aAEngine会被初始化AAEngine1类的唯一实例将会创建则多线程并发的场景下也可确保单例对象的唯一性那什么是懒汉式单例呢其实最上面的AAEngine就是懒汉式单例在多线程并发的场景下懒汉式单例有问题如何解决 答案是通过锁的方式。懒汉式单例线程锁懒汉式单例有延迟Lazy的思想只有在需要的时候才去加载实例。在多线程并发的场景下我们使用双重检查锁定Double-Check Locking。完成代码如下private static AAEngine aAEngine null; private static object lockObjnew object(); private AAEngine() { } //获取实例 public static AAEngine GetInstance() { //第一重验证 if (aAEngine null) { lock (lockObj) { //第二重验证 if (aAEnginenull) { aAEngine new AAEngine(); } } } return aAEngine; }单例模式在开源Nop项目中实践为了配合你没有阅读过Nop项目源码我会把涉及到单例的几个类源码贴出来。主要设计到3个类Singleton、IEngine、EngineContext。Singleton类 public class SingletonT : BaseSingleton { private static T instance; /// summary /// The singleton instance for the specified type T. Only one instance (at the time) of this object for each type of T. /// /summary public static T Instance { get instance; set { instance value; AllSingletons[typeof(T)] value; } } }IEngine类public interface IEngine { /// summary /// 添加配置服务 Add and configure services /// /summary /// param nameservicesCollection of service descriptors/param /// param nameconfigurationConfiguration of the application/param /// param namenopConfigNop configuration parameters/param /// returnsService provider/returns IServiceProvider ConfigureServices(IServiceCollection services, IConfiguration configuration, NopConfig nopConfig); /// summary /// 配置请求管道 Configure HTTP request pipeline /// /summary /// param nameapplicationBuilder for configuring an applications request pipeline/param void ConfigureRequestPipeline(IApplicationBuilder application); /// summary /// 解析服务 Resolve dependency /// /summary /// typeparam nameTType of resolved service/typeparam /// returnsResolved service/returns T ResolveT() where T : class; /// summary /// 解析服务 Resolve dependency /// /summary /// param nametypeType of resolved service/param /// returnsResolved service/returns object Resolve(Type type); /// summary /// 解析所有服务Resolve dependencies /// /summary /// typeparam nameTType of resolved services/typeparam /// returnsCollection of resolved services/returns IEnumerableT ResolveAllT(); /// summary /// Resolve unregistered service /// /summary /// param nametypeType of service/param /// returnsResolved service/returns object ResolveUnregistered(Type type); }EngineContext 引擎上下文类 #region Methods /// summary /// Create a static instance of the Nop engine. /// /summary [MethodImpl(MethodImplOptions.Synchronized)] public static IEngine Create() { //create NopEngine as engine return SingletonIEngine.Instance ?? (SingletonIEngine.Instance new NopEngine()); } /// summary /// Sets the static engine instance to the supplied engine. Use this method to supply your own engine implementation. /// /summary /// param nameengineThe engine to use./param /// remarksOnly use this method if you know what youre doing./remarks public static void Replace(IEngine engine) { SingletonIEngine.Instance engine; } #endregion #region Properties /// summary /// Gets the singleton Nop engine used to access Nop services. /// /summary public static IEngine Current { get { if (SingletonIEngine.Instance null) { Create(); } return SingletonIEngine.Instance; } } #endregion }从nop的源码中我们发现他使用的懒汉式单例含双重检查锁定外部访问IEngine实例是通过EngineContext上下文来访问的。在创建IEngine实例方法create时使用时的 [MethodImpl(MethodImplOptions.Synchronized)]特性表示create方法只能由一个线程执行类似lock锁。如何使用代码如下 //create engine and configure service provider var engine EngineContext.Create(); var serviceProvider engine.ConfigureServices(services, configuration, nopConfig); 。。。。。。。。。。。。 EngineContext.Current.ResolveIScheduleTaskService();nop封装的优秀的代码也收录到我的开源项目中了喜欢可以star下 https://github.com/ChengLab/AAFrameWork
http://www.zqtcl.cn/news/112945/

相关文章:

  • 俄乌局势最新消息惠州seo排名优化
  • 常州发布信息的有什么网站电商平台建设公司
  • 高新区手机网站建设长沙关键词优化服务
  • 网站开发预算报价表推销网站的方法
  • 做网站需要几个人昆明旅行社网站开发
  • 上海产品网站建设网站建设分为哪些
  • 史志网站建设在线网站建设工程标准
  • 青海省建设工程在哪个网站发布北京专业网站外包公司
  • 东营网站建设公司wordpress获取子分类
  • 网站的尾页要怎么做d代码做网站
  • 自己做一元购网站烟台网站设计公司推荐
  • 有没有做彩票直播的网站成都十八个网红打卡地
  • 急求聊城网站建设网站服务器管理系统
  • 做网站需要什么许可证商场设计效果图
  • html网页制作视频windows优化大师有哪些功能
  • 国外建站主机帝国手机网站cms系统
  • 响应式网站建设哪家好网站空间支付方式
  • 腾讯广告建站工具贵州企业网站建设价格
  • 最新的网站建设架构wordpress管理员头像
  • 手机网站模版化工网站建设公司
  • 网站建设 会计分录北京网站建设主页
  • 北京市建设监理协会网站网站一般多少钱
  • 做网站零成本网站如何做成app
  • 建小网站多少钱深圳网站备案注销
  • 海淘网站是谁做的为该网站做自适应
  • php网站开发自学如何做x响应式网站
  • 吴忠网站建设公司随州网站建设优化推广渠道
  • dedecms 招聘网站网站建设市场调研报告
  • 建小网站多少钱做会计网站的流程
  • 为一个村做网站优秀文创产品设计案例及分析