Tag: singleton

这个Singleton实现是正确的还是线程安全的?

这个单例实现是正确的还是线程安全的? class Class { public static readonly Class Instance; static Class() { Instance = new Class(); } private Class() {} }

单例实现与静态构造函数的懒惰

Jon Skeet 在他的单例实现中建议,如果你需要单独的最大懒惰,你应该添加一个静态构造函数,这将使编译器将类型标记为beforefieldinit。 但是,我做了一些测试,如果没有 beforefieldinit,它似乎更懒。 代码示例(私有构造函数调用输出到控制台并validation字段是否已初始化: public sealed class Singleton { private static readonly Singleton instance = new Singleton(); public static string Stub() { return “123”; } // Explicit static constructor to tell C# compiler // not to mark type as beforefieldinit //static Singleton() //{ //} private Singleton() { Console.WriteLine(“private ctor”); } public static Singleton […]

Singleton Vs ServiceLocator

使用服务定位器与单身人士相比有哪些优缺点? 我已经读到单身人士很糟糕,但我想知道服务定位器是否通常是更好的做事方式。

C#Singleton,带有接受参数的构造函数

我想创建一个静态类或单例类,它接受对其构造函数中另一个对象的引用。 静态类已经出来了,但我想我可以创建一个在其构造函数中接受参数的单例。 到目前为止,我没有任何运气搞清楚或谷歌搜索语法。 这可能吗? 如果是的话,我该怎么做? 对不起,在最初的post中没有任何例子,我匆匆写了。 我觉得我的回答已经在回复中,但这里有一些关于我想做的事情的澄清: 我想创建一个特定类型的单个实例(表示Singleton),但该类型的单个实例需要保存对不同对象的引用。 例如,我可能想要创建一个Singleton“Status”类,它拥有一个StringBuilder对象和一个Draw()方法,可以调用该方法将所述StringBuilder写入屏幕。 Draw()方法需要知道我的GraphcisDevice才能绘制。 所以我想这样做: public class Status { private static Status _instance; private StringBuilder _messages; private GraphicsDevice _gDevice; private Status(string message, GraphicsDevice device) { _messages.Append(message); _gDevice = device; } // The following isn’t thread-safe // This constructor part is what I’m trying to figure out public static Status […]

在单身人士背后提取IoC容器 – 做错了吗?

通常,我喜欢让应用程序完全不知道IoC容器。 但是我遇到了需要访问它的问题。 为了消除痛苦,我使用了一个基本的单身人士。 在你跑山或拉出霰弹枪之前,让我回顾一下我的解决方案。 基本上,IoC单例绝对没有任何东西,它只是委托给必须传入的内部接口。我发现这使得使用Singleton减少痛苦。 下面是IoC包装器: public static class IoC { private static IDependencyResolver inner; public static void InitWith(IDependencyResolver container) { inner = container; } /// Container has not been initialized. Please supply an instance if IWindsorContainer. public static T Resolve() { if ( inner == null) throw new InvalidOperationException(“Container has not been initialized. Please […]

一般的单身人士

对于一般的单身人士,你们对此有何看法? using System; using System.Reflection; // Use like this /* public class Highlander : Singleton { private Highlander() { Console.WriteLine(“There can be only one…”); } } */ public class Singleton where T : class { private static T instance; private static object initLock = new object(); public static T GetInstance() { if (instance == null) […]

奇怪的系统.__佳能exception

我有一个使用单例类ThreadQueue的Windows服务。 当服务启动时,它调用ThreadQueue.Start()然后该类接受并将限制并发的任务排队到可配置数量的线程。 ThreadQueue.Start()只在服务启动时调用一次。 有时,在运行几个小时后,我收到以下exception: Application: myservice.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.NullReferenceException Stack: at Apollo.Business.Framework.Threading.ThreadQueue.ThreadQueue`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Start() at System.Threading.ThreadHelper.ThreadStart_Context(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Threading.ThreadHelper.ThreadStart() 什么是System.__Canon和什么使这个调用作为类型参数传递给它? 谁能摆脱任何光明?

MEF是否为Singleton模式提供任何价值?

我正在研究一个MEF项目,以发现使用和实现技术。 我的第一个发现阶段是实现动态可配置和集中的数据控制器。 自定义行为的一种方法是inheritance我提供的强制执行奇点规则的类。 虽然Singleton模式在使用中受到很多诽谤,但我可能已经找到了一种可以在某种程度上validation模式存在困难的实现。 情况 假设主机导入的数据控制模块( DataController )旨在根据兄弟模块的请求为数据库提供公共管道。 我只需要一个DataController并组成一个模块,DataController必须实现IDataController。 DataProvider作为基类的实现纯粹是可选的; 但是,从DataProvider派生需要一些额外的处理。 观察 收集事实 : 静态类无法实现或扩展抽象类或接口。 仅此事实就消除了使用静态类来确保DataController的单一存在。 实现Singleton模式的DataController将确保每个应用程序域的单一存在。 DataController没有限制; 允许inheritance在Host中导入和编写的必需接口。 给定DataController的推导,Singleton模式的标准实现可能在同样的情况下具有挑战性。 建议的数据库提供了可公开访问的类:IDataController和抽象的DataProvider。 为了确保派生的DataController的单个实例,实现将需要偏离规范。 解决方案 此时,解决方案似乎很清楚。 DataHandler基类实现Singleton模式。 我并不天真地认为还有其他方法可以做到这一点。 但这是我对如何实现模式的粗略期望: // DataLibrary referenced by Host public interface IDataController { IDataController Start(); DbConnection CreateConnection(params string[] args) where TDbConnection : DbConnection, IDbConnection; } public abstract class DataProvider { // singleton […]

C#中的一次性单身人士

我有一个使用“静态只读T实例=新T();”的单例 图案。 但是,我遇到了T是一次性的情况,实际上需要处理以进行unit testing。 如何修改此模式以支持一次性单件? 我想要的界面是这样的: var x = Foo.Instance; var y = Foo.Instance; // x == y … x.Release(); // this causes the next Foo.Instance to return a fresh object // also, it assumes no further operations on x/y will be performed. 注意 – 模式当然必须是线程安全的。 编辑 – 出于生产代码的目的,这是一个真正的单身人士。 问题是它锁定了一些文件,因此在unit testing中我们必须处理它。 如果可能的话,我也更喜欢可以重复使用的模式。

如何抽象单例类?

这就是我编写单例类的方法。 public class MyClass { /// /// Singleton /// private static MyClass instance; /// /// Singleton access. /// public static MyClass Instance { get { if (_instance == null) { _instance = new MyClass(); } return _instance; } } private MyClass() { …. } } 如何创建可重用的单例模式? 单身模式存在以下挑战。 构造函数是private或protected 。 基类无法实例化inheritance的类。 因此,您可以重用一个常见的抽象MyAbstractSingletonClass 。 它必须具有本地只读属性才能获取实例。 问题 我在许多类上使用这种模式,并且总是必须编写相同的代码。 […]