Tag: singleton

自闭式StreamWriter单例

我试图在其生命周期结束时进一步缩小Flush StreamWriter中的问题,实现类似单例的自关闭StreamWriter : class Foo : System.IO.StreamWriter { private static readonly Foo instance = new Foo( “D:/tmp/test” ); private Foo( string path ) : base( path ) { } ~Foo() { this.Close(); } public static Foo Instance { get { return instance; } } } 预期的效果是在像这样的示例程序中 class Program { private static void Main( string[] args […]

我可以使用Ninject来实例化任何依赖的单件服务吗?

我的asp.net mvc应用程序中有一些服务可以监听AMQP消息并调用方法。 没有控制器依赖于此,因此它不会自行实例化。 我可以手动实例化它,明确地提供它与kernel.Get依赖关系,但感觉我不应该这样做。 即使没有别的东西依赖它,我能否热切地让Ninject在单例范围内实例化类?

可以在C#中使用带有非默认构造函数的单例吗?

我正在为我的一个项目实现一个通知框架。 由于我希望它非常通用,用户可以使用多个传输层,因此他并不需要关心使用一种传递方法(比方说WCF)或另一种(例如ActiveMQ)。 用户可以访问的界面当然与传递方法(WCF或ActiveMQ)无关。 尽管如此,这两个类(使用者和生产者)实现了单例,因此它们实际上使用默认构造函数(意思是没有参数)。 我的问题是,我想有一个参数,用户想要使用的交付方法。 但据我所知,单身人士只使用默认构造函数? 这是正常的,因为没有必要使用带参数的单例。 那么,我的选择是什么? 不创造单身人士? 创建一个设置交付方式的方法? 非常感谢您的帮助, 塞巴斯蒂安

如何在c#中返回一个静态类实例

我想得到一个静态类的实例,但是如果不在非静态类上实现单例包装,我似乎无法做到这一点 – 这是可能的,还是我错过了什么? public class MyInstanceTester { public MyInstanceTester() { //this is how i get a reference to a singleton now MyClass instance1 = MyClass.Instance(); //this is what is would like to do (if only the compiler would let me) MyStaticClass instance2 = MyStaticClass.Instance(); } } public class MyClass { private static MyClass _myInstance; static […]

使用xml编辑对象而不创建新实例

我有一个需要成为单身人士的class级。 它还必须能够在xml文件中加载和保存其字段数据。 以下方法将返回一个新实例,它会破坏我的Singleton模式,从而在我的代码中留下潜在的错误。 public Settings Load() { using (Stream stream = File.OpenRead(FileName)) { XmlSerializer serializer = new XmlSerializer(typeof(Settings)); return (Settings)serializer.Deserialize(stream); } } 我可以使用什么方法更新现有实例中的数据,而不是返回一个全新的实例? 我已经研究了一些Linq到Xml,但没有找到任何好的例子。 我是否有必要将所有现场数据保存在字典中?

单实例窗口形成应用程序以及如何获取它的参考?

我有一个Windows窗体应用程序,当时只允许一个实例运行。 我已经使用Mutex实现了Singleton。 应用程序必须可以从命令行启动(带或不带参数)。 应用程序由脚本启动和退出。 用户不能对其采取任何行动。 因此,应用程序的目的是简单的“指标”应用程序,它将只为最终用户显示一些视觉和图形信息。 最终用户无法对其进行任何操作,只需查看即可。 它是Windows窗体应用程序,因为视觉和图形外观是相对容易的实现(你可以得到它最顶层,无边框等)。 简单地说:当有人试图用退出命令行参数运行相同的应用程序时,如何退出当前运行的应用程序? bool quit = (args.Length > 0 && args[0] == “quit”) ? true : false; using (Mutex mutex = new Mutex(false, sExeName)) { if (!mutex.WaitOne(0, true)) { if (quit) { // This is the tricky part? // How can I get reference to “previous” launced // Windows […]

当我使用XmlSerialiser对其进行反序列化时,为什么我的DbNull不是单例?

我一直认为DbNull.value是一个单身人士。 因此你可以做这样的事情: VB.NET: If someObject Is DbNull.Value Then … End if C#: If (someObject == DbNull.Value) { … } 但是最近,我使用XmlSerialiser序列化了一个DbNull实例,突然间它不再是单例了。 类型比较操作(如C#(obj是DBNull))工作正常。 代码如下: [Serializable, System.Xml.Serialization.XmlInclude(typeof(DBNull))] public class SerialiseMe { public SerialiseMe() { } public SerialiseMe(object value) { this.ICanBeDbNull = value; } public Object ICanBeDbNull { get; set; } } public void Foo() { var serialiseDbNull = […]

使用自动属性实现单例是一个好主意吗?

我最近发现了有关自动属性的内容并且非常喜欢它们。 此刻,我正试图在任何地方使用它们。 不仅仅是能够在任何地方使用它们,而是更多地了解它们在大多数情况下的工作情况。 现在我正在制作一个单身人士并且想:“嘿,让我们在这里尝试自动属性”。 public class MySingleton { public static MySingleton MySingleton { get; private set; } private MySingleton() {} static MySingleton() { MySingleton = new MySingleton(); } } 所以我的问题是:“实现像这样的单身人士是一个好主意吗?” 我不是在问一个单身一般是不是一个好主意。

Singleton和HttpApplicationState

在Web应用程序中,我只需要一个名为ProcessManager的类的实例。 一种方法是使它成为单身人士。 另一种方法是使用HttpApplicationState来确保我总是访问同一个实例,如下所示: public static ProcessManager ProcessManager { get { HttpApplicationState applicationState = HttpContext.Current.Application; if (applicationState[“ProcessManager”] == null) { applicationState[“ProcessManager”] = new ProcessManager(); } return (ProcessManager)applicationState[“ProcessManager”]; } } 哪种方法更好,为什么?

如何在最终确定静态变量之前得到通知

我什么时候可以清理存储在C#中的静态变量中的对象? 我有一个懒惰的初始化静态变量: public class Sqm { private static Lazy _default = new Lazy(); public static Sqm Default { get { return _default.Value; } } } 注意 :我刚刚将Foo改为static类。 如果Foo是静态的,它不会以任何方式改变问题。 但有些人确信,如果不先构建一个Foo实例,就不可能构造一个Sqm实例。 即使我确实创建了一个Foo对象; 即使我创建了100个,它也无法解决问题(何时“清理”静态成员)。 样品用法 Foo.Default.TimerStart(“SaveQuestion”); //…snip… Foo.Default.TimerStop(“SaveQuestion”); 现在,我的Sqm类实现了一个方法,当不再需要该对象时必须调用该方法,并且需要自行清理(将状态保存到文件系统,释放锁等)。 必须在垃圾收集器运行之前调用此方法(即在调用对象的终结器之前): public class Sqm { var values = new List(); Boolean shutdown = false; protected void Cleanup(ICollection stuff) { […]