Tag: singleton

单身类可以是静态的吗?

单身类可以是静态的吗?

在Singleton上使用Dispose来清理资源

我的问题可能更多地与语义有关,而不是与IDisposable的实际使用有关。 我正在实现一个单例类,负责管理在执行应用程序期间创建的数据库实例。 应用程序关闭时,应删除此数据库。 现在我将删除操作由应用程序在关闭时调用的单例的Cleanup()方法处理。 当我编写Cleanup()的文档时,让我感到震惊的是我正在描述应该使用Dispose()方法来清理资源。 我原本没有实现IDisposable因为它在我的单身中看起来不合适,因为我不想要任何东西来处理单身本身。 目前还没有,但将来可能会出现这样一个原因:可能会调用此Cleanup()但单例仍然需要存在。 我想我可以包含GC.SuppressFinalize(this); 在Dispose方法中使这个可行。 因此,我的问题是多方面的: 1)在单例上实现IDisposable从根本上说是一个坏主意吗? 2)我只是通过使用Cleanup()而不是Dispose()来混合语义,因为我正在处理资源我真的应该使用dispose吗? 3)用GC.SuppressFinalize(this);实现’Dispose()’ GC.SuppressFinalize(this); 这样我的单身实际上并没有被破坏,因为我希望它在调用清理数据库后生存。

静态变量的线程安全初始化

我一直在使用这种模式来初始化我的类中的静态数据。 它看起来对我来说是安全的,但我知道细微的线程问题是多么微妙。 这是代码: public class MyClass // bad code, do not use { static string _myResource = “”; static volatile bool _init = false; public MyClass() { if (_init == true) return; lock (_myResource) { if (_init == true) return; Thread.Sleep(3000); // some operation that takes a long time _myResource = “Hello World”; _init = […]

是否可以在接口中包装C#单例?

我目前有一个类,我只有静态成员和常量,但我想用一个包装在界面中的单例替换它。 但是我怎么能这样做,记住我见过的每个单例实现都有一个静态实例方法,从而破坏了接口规则?

这是C#的有效,懒惰,线程安全的Singleton实现吗?

我实现了像这样的Singleton模式: public sealed class MyClass { … public static MyClass Instance { get { return SingletonHolder.instance; } } … static class SingletonHolder { public static MyClass instance = new MyClass (); } } 从谷歌搜索C#Singleton实现,似乎这不是在C#中做事的常用方法。 我发现了一个类似的实现,但SingletonHolder类不是静态的,并且包含一个显式(空)静态构造函数。 这是实现Singleton模式的有效,懒惰,线程安全的方法吗? 还是有什么我想念的?

通用单例

我有一个问题,这是制作Generic Singleton的正确方法吗? public class Singleton where T : class, new() { private static T instance = null; private Singleton() { } public static T Instancia { get { if (instance == null) instance = new T(); return instance; } } } 编辑: 检查一些PDF我发现一个通用的Singleton用另一种方式制作,这是另一个正确吗? public class Singleton where T : class, new() { Singleton() { } […]

需要有关OOP理念的建议

我正试图在C#中开启一个大型项目。 我之前的经验是在Delphi中,默认情况下,每个表单都是在应用程序启动时创建的,并且表示在(gasp)全局变量中保存的引用。 因此,我正在努力使我的思维适应100%面向对象的环境,而我的头脑正在旋转一点点。 我的应用程序将有大量的类集合这些类中的大多数只需要一个实例。 所以我在想:静态类。 我不太确定为什么,但我在这里读到的大部分内容都表明,如果我的class级要持有一个状态,我将其视为任何属性值,我应该使用单例结构。 好的。 但是有些人因为逃避我的理由而认为单身人士也是邪恶的。 除了这个程序之外,这些类都没有被用在任何地方的危险。 所以它们当然可以作为常规对象(与单例或静态类)一起工作 然后是对象之间的交互问题。 我很想创建一个充满公共静态属性的Global类,引用许多这些类的单个实例。 我还考虑过制作MainForm的属性(静态或实例,不确定哪个)。 然后我会让每个class级都知道MainForm作为所有者。 然后各种对象可以作为所有者互相引用。 对象1 ,所有者。 对象2等 我担心我的电子墨水耗尽了,或者至少让任何一个人的耐心都受到了这么长时间的困扰。 我希望我已经清楚地解释了我完全混乱的状态。 我只是在寻找一些关于我的最佳实践的建议。 所有输入都受到欢迎和赞赏。 在此先感谢David Jennings

如何设置Ninject单身人士

我有一个类( MyFacade ),我用Ninject注入参数: class MyFacade { IDemoInterface demo; public MyFacade(IDemoInterface demo) { this.demo = demo; } public void MyMethod() { Console.WriteLine(demo.GetInfo()); } } 当然,我必须设置Ninject以注入我的参数的适当实现( IDemoInterface ) 我知道,我可以通过kernel.Get();来实例化MyFacade对象kernel.Get(); 没有设置别的东西。 目前我的门面没有接口(因为它是我唯一的实现,也许我会为标准建议添加其接口) 如果我想制作这个外观singlenton,我知道两种方法:创建一个空构造函数并通过执行此kernel.Get();传递参数kernel.Get(); 或者通过设置Ninject,如: kernel.Bind().To().InSingletonScope(); 第二个看起来更好的方法,但你知道以单一方式设置它的任何其他方法吗?

Web应用程序中的单例模式

我在我的Web应用程序中使用单例模式作为datacontext,因此我不必每次都实例化它,但是我不确定Web应用程序是如何工作的,IIS是否为每个连接的用户打开一个线程? 如果是这样,如果我的单例不是线程安全会发生什么? 另外,对于datacontext使用单例模式是否可以? 谢谢。

重构静态类以使用dependency injection

我们需要在具有静态方法的代码中使用非托管库。 我想在我的代码中将库操作作为依赖项引入。 除了具有静态方法之外,库还具有初始化方法和设置方法,两者都是全局的。 因此,我不能将它包装在实例类中,因为如果一个实例更改了设置,则所有其他实例都将受到影响,如果一个实例初始化,则所有其他实例将重新初始化。 我想把它作为一个单独的类引入。 这样它将在一个实例类中,但只有一个实例,因此我不必担心更改设置或初始化。 您如何看待这种方法? 我对dependency injection模式很新,我不确定单例模式是否是一个好的解决方案? 您对类似案例的解决方案是什么? 编辑:初始化也是一个参数,所以我不能只是锁定方法调用,并在每次调用时重新初始化和更改设置。 编辑2:以下是一些方法的签名: public static void Initialize(int someParameter) // Parameter can only be changed by re-initalization which // will reset all the settings back to their default values. public static float[] Method1(int someNumber, float[] someArray) public static void ChangeSetting(string settingName, int settingValue)