jjzjj

singleton

全部标签

c# - 我可以用这种方式为所有派生的单例定义一个抽象类吗?

这是我的抽象类,每次我想制作一个Singleton时都必须派生它:publicabstractclassSingletonwhereT:Singleton{privatestaticreadonlyLazy_instance=newLazy(()=>{varconstructor=typeof(T).GetConstructor(BindingFlags.NonPublic|BindingFlags.Instance,null,newType[0],null);return(T)constructor.Invoke(null);});publicstaticTInstance{get{

c# - 多线程 C# 应用程序中的惰性单例

我正在开发一个使用WCFWeb服务的多线程C#应用程序。与web服务的连接将有一个特定的超时时间,我们可以定义该超时时间,超时后它将关闭。我希望使用单例类来存储与Web服务的连接。我正在尝试按如下方式获取实例:CLazySingletonins=CLazySingleton.Instance;stringconnection=CLazySingleton.abc;下面是单例类的代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceLazySingleton{pu

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

我一直在使用这种模式来初始化我的类中的静态数据。它对我来说看起来是线程安全的,但我知道线程问题有多么微妙。这是代码:publicclassMyClass//badcode,donotuse{staticstring_myResource="";staticvolatilebool_init=false;publicMyClass(){if(_init==true)return;lock(_myResource){if(_init==true)return;Thread.Sleep(3000);//someoperationthattakesalongtime_myResource="H

c# - 需要一些异步调用的单例类

我有一个单例类,它加载了一些关于它的构造的数据。问题是加载这些数据需要调用async方法,但是构造函数不能是async。换句话说,我的类(class)有以下结构:publicclassSingleton{privatestaticSingletoninstance;privateSingleton(){LoadData();}publicstaticSingletonInstance{get{if(instance==null){instance=newSingleton();}returninstance;}}}LoadData()是一个async函数,它调用许多async函数以及初

c# - 单例属性

好的,如果我创建一个单例类并通过公共(public)静态属性公开单例对象......我明白了。但是我的单例类中还有其他属性。那些应该是静态的吗?那些也应该是私有(private)的吗?我只想通过这样做能够访问我的单例类的所有属性:MySingletonClass.SingletonProperty.SomeProperty2SingletonProperty返回单个单例实例的位置。我想我的问题是,如何公开单例类中的其他属性...将它们设为私有(private),然后通过公共(public)单例静态属性访问它们?或者单例的所有其他属性和方法是否应该是公共(public)非静态的?

c# - C#中的一次性单例

我有一个使用“staticreadonlyTInstance=newT();”的单例图案。但是,我遇到了T是一次性的情况,实际上需要为单元测试进行处理。我如何修改此模式以支持一次性单例?我想要的界面是这样的:varx=Foo.Instance;vary=Foo.Instance;//x==y...x.Release();//thiscausesthenextFoo.Instancetoreturnafreshobject//also,itassumesnofurtheroperationsonx/ywillbeperformed.注意-当然,模式必须是线程安全的。编辑-出于生产代码的目

c# - Lazy<T> 是线程安全的惰性加载单例的良好解决方案吗?

我们在get上使用双重锁定实现了一个延迟加载的单例,以确保实例只初始化一次(而不是由于线程竞争条件而初始化两次)。我想知道是否只使用Lazy是解决这个问题的好方法吗?即.privatestaticLazy_instance=newLazy(()=>returnnewMyClass());publicstaticMyClassInstance{get{return_instance.Value;}} 最佳答案 我建议你阅读评论中的引用文章:LazyClassImplementingtheSingletonPatterninC#在所有情

c# - 重构静态类以与依赖注入(inject)一起使用

我们需要在具有静态方法的代码中使用非托管库。我想在我的代码中将库操作作为依赖项引入。除了具有静态方法之外,该库还有一个初始化方法和一个设置方法,它们都是全局的。所以我不能只将它包装在一个实例类中,因为如果一个实例更改设置,所有其他实例都会受到影响,如果一个实例被初始化,所有其他实例将被重新初始化。我考虑过将其作为单例类引入。这样它将在一个实例类中,但只有一个实例,因此我不必担心更改设置或初始化。您如何看待这种方法?我对依赖注入(inject)模式还很陌生,我不确定单例模式是否是一个好的解决方案?对于类似的案例,您的解决方案是什么?编辑:初始化也需要一个参数,所以我不能只是锁定方法调用并

c# - 在 .Net Remoting 中使用单例

我在通过远程处理公开的单例类时遇到了一些问题。在我的服务器中,我有:TcpChannelchannel=newTcpChannel(Settings.Default.RemotingPort);ChannelServices.RegisterChannel(channel,false);RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemotableObject),"RemotableObject",WellKnownObjectMode.Singleton);RemotableObject是继承MarshalByR

c# - 设置 Ninject 单例的方法

我有一个类(MyFacade),我用Ninject注入(inject)了参数:classMyFacade{IDemoInterfacedemo;publicMyFacade(IDemoInterfacedemo){this.demo=demo;}publicvoidMyMethod(){Console.WriteLine(demo.GetInfo());}}当然,我必须设置Ninject注入(inject)我的参数的适当实现(IDemoInterface)我知道,我可以实例化MyFacade通过做对象kernel.Get();无需设置任何其他内容。目前我的门面没有接口(interfac