asp.net中使用单例
摘要
有这样一个service,需要运行的asp.net站点上,但要保证这个实例是唯一的。单例用来启用聊天机器人,保证唯一,以免启动多个,造成客户端发送消息的时候,会造成每个机器人都发送消息,app收到多条消息。
Demo
单例类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Wolfy.SingleDemo.Models
{
public class SingleParameter
{
private static SingleParameter instance;
private static readonly object obj = new object();
private static List<string> Names;
public static SingleParameter CreateInstance()
{
if (instance == null)
{
lock (obj)
{
if (instance == null)
{
instance = new SingleParameter();
}
}
}
return instance;
}
private SingleParameter()
{
Names = new List<string>();
}
public void Remove(string name)
{
lock (obj)
{
for (int i = Names.Count - ; i >= ; i--)
{
if (Names[i] == name)
{
Names.RemoveAt(i);
}
}
}
}
public void Set(string name)
{
lock (obj)
{
if (!Names.Contains(name))
{
Names.Add(name);
} }
}
public List<string> GetNames()
{
lock (obj)
{
return Names;
}
}
}
}
测试例子
在视图List中展示添加了哪些name,在视图Add中添加name,通过刷新list查看是否已经保存在了集合中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Wolfy.SingleDemo.Models; namespace Wolfy.SingleDemo.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult List()
{
SingleParameter single = SingleParameter.CreateInstance();
for (int i = ; i < ; i++)
{
single.Set((i + ).ToString());
}
return View(single.GetNames());
}
public ActionResult Add(string name)
{
SingleParameter single = SingleParameter.CreateInstance();
single.Set(name);
return View(single.GetNames());
}
}
}
结果


asp.net中使用单例的更多相关文章
- 在Swift中实现单例方法
在写Swift的单例方法之前可以温习一下Objective-C中单例的写法: + (instancetype)sharedSingleton{ static id instance; static d ...
- 28.怎样在Swift中实现单例?
1.回忆一下OC中的单例实现 //AFNetworkReachabilityManager中的单例,省略了其他代码 @interface AFNetworkReachabilityManager : ...
- iOS开发——多线程OC篇&多线程中的单例
多线程中的单例 #import "DemoObj.h" @implementation DemoObj static DemoObj *instance; // 在iOS中,所有对 ...
- 5.2:缓存中获取单例bean
5.2 缓存中获取单例bean 介绍过FactoryBean的用法后,我们就可以了解bean加载的过程了.前面已经提到过,单例在Spring的同一个容器内只会被创建一次,后续再获取bean直接从单例 ...
- Swift中编写单例的正确方式
在之前的帖子里聊过状态管理有多痛苦,有时这是不可避免的.一个状态管理的例子大家都很熟悉,那就是单例.使用Swift时,有许多方法实现单例,这是个麻烦事,因为我们不知道哪个最合适.这里我们来回顾一下单例 ...
- 【Spring】8、Spring框架中的单例Beans是线程安全的么
看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...
- Spring5源码解析-Spring框架中的单例和原型bean
Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...
- 多个so中模板单例的多次实例化
在Android打包项目时,发现登录功能不能使用了,logcat中也没发现什么问题,最后一行一行log定位到了问题.原来是一个so文件中的构造函数被初始化二次! 这个单例是通过继承模板来实现的(暂 ...
- Python中的单例设计
01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码.让代码更容易被他人理解.保 ...
随机推荐
- js-JavaScript高级程序设计学习笔记12
第十五章 使用canvas绘图 1.要使用<canvas>元素,必须先设置其width和height属性. 2.要在这块画布上绘图,需要先取得绘图上下文,取得绘图上下文对象的引用,需要调用 ...
- Leetcode 221. Maximal Square
本题用brute force超时.可以用DP,也可以不用. dp[i][j] 代表 以(i,j)为右下角正方形的边长. class Solution(object): def maximalSquar ...
- 使用reids结合wcf实现集群模式下的聊天室功能
1.reids的特点 Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型(字符串,哈希,列表,集合,有序集合),. Redis可以将数据复 ...
- win10 office2013激活工具
亲测可以用哦 下载
- 未在本地计算机上注册"microsoft.ACE.oledb.12.0"提供程序解决办法
错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序. 解决办法: 去http://download.microsoft.com/download/7/0/3/7 ...
- 关于AWR报告命中率指标的解释(转)
文章转自:http://blog.itpub.net/24558279/viewspace-762371/ 从Oracle 10g开始,Oracle给广大DBA提供了一个性能优化的利器,那便是Auto ...
- Java命名约定
类名 类名应该是名词, 描述对象.应该按照驼峰式写法,即只有每个单词首字母大写. 接口名称 接口名称应该是形容词,描述功能.应该以“able”.“ible”结尾,否则应该是名词.通常遵循和类名写相同的 ...
- MVC5-8 ViewData、ViewBag、TempData分析
MVC中Contoller与视图的数据传输 后台的值显示到界面上,我们有几种方式呢.MVC给我们提供了ViewData.ViewBag.TempData.Model这几种方式,当然我们也可以用ajax ...
- LaTeX 笔记---Q&A
Q: Is it possible to check which package do I need to install to get certain .sty file from tlmgr ra ...
- SampleDateFormat进行日期格式化
我们生成的日期 ,可能不是我们想要的格式,这时候,就要用到SampleDateFormat类的format方法转换一下, SampleDateFormat是java.text包下的一个常用日期类 这个 ...