Tag: 单例

C# – 单例模式

正如你从我的昵称中看到的那样,我是新手,实际上是在学习Singleton模式,我遇到了一个问题。 在我了解到静态构造函数总是在标准构造函数之前执行之前,但在下面的代码中,结果是不同的,首先我看到“Insta”字符串然后是“静态”,为什么会发生? sealed class Singleton { private static readonly Singleton instance; private Singleton() { Console.WriteLine(“Insta”); } static Singleton() { instance = new Singleton(); Console.WriteLine(“Static”); } public static Singleton Instance { get { return instance; } } } class Program { static void Main() { Singleton s1 = Singleton.Instance; } }

用于ASP.NET应用程序的Singleton compact Logger

我编写了一个Singeton紧凑型记录器,它非常适合ASP.NET应用程序。 只需重新Logger.Log.Info(“Hello world!”);它然后Logger.Log.Info(“Hello world!”); 。 它还会自动记录未处理的exception。 有时我在尝试创建日志文件Stream遇到错误。 例外是: 该进程无法访问文件’C:\ inetpub \ wwwroot \ MyApp \ Logs \ 5-22-2011.log’,因为它正由另一个进程使用。 我检查了Process Explorer,只有w3wp.exe处理了日志文件。 似乎不同的线程出现了问题。 大概每24小时发生一次!

每个用户的Singleton-Pattern ASP.NET C#

我正在使用asp.net c#构建一个Web应用程序,我有一个类,我想在多个页面中使用,每次实例化它。 我需要在其中加载数据,并且在用户会话期间永远不会丢失它们。 我想到了单例模式,但它共享了浏览器之间的类的实例。 我该如何解决这个问题?

这个“单例”应该在ASP.NET应用程序中是线程安全的吗?

请注意,“singleton”在稍微不常见的意义上使用 – “对象像HttpContext.Current一样可见”,与普通的“具有一个共享实例的对象”不同。 我为我的asp.net MVC应用程序使用单例类型的UserContext类。 此类允许我将用户数据存储为强类型会话对象。 我遇到了这个CodeReview问题,并想知道是否有必要关注此应用程序上下文中的线程安全性。 这是我的代码的简化: public class UserContext { private UserContext() { } public static UserContext Current { get { if (HttpContext.Current.Session[“UserContext”] == null) BuildUserContext(); return (UserContext)HttpContext.Current.Session[“UserContext”]; } } private static void BuildUserContext() { if (!user.Identity.IsAuthenticated) return; var uc = new UserContext { IsAuthenticated = true }; // …snip… // Set up […]

返回后代的单例实例

我有几个单例类,所以我尝试用方法GetInstance(params)和派生类创建一个父BaseClass,它应该实现这个方法并返回自己的实例(所以我不必抛出它们)… as它们是单例,方法应该是静态的,但不允许覆盖静态方法。 编码它的最佳方法是什么? 我想要的示例代码: public class Base { public static virtual T GetInstance() where T : class; } public class Derived { Derived instance; public static override T GetInstance() where T : typeOf(this){ if (instance == null) { instance = new Derived(); } return instance; } } 在我想要打电话的外面的代码中 Derived.GetInstance().SomeDerivedMethod() 不 (Derived.GetInstance() as Derived).SomeDerivedMethod() and not […]

跨线程的HTTPContext

我需要为每个Web请求实例化一个单例对象,以便数据处理一次并在整个请求中有效,我使用HttpContext.Current.Items在HTTP请求期间共享数据,一切都很好,直到我们需要单例对象实例在多个线程中,我想到的第一件事就是将HttpContext实例传递给新线程: HttpContext context = HttpContext.Current; ThreadPool.QueueUserWorkItem(callback => { HttpContext.Current = context; // blah blah }); 我不认为这是一种线程安全的方法,如此处所述 。 使用Reflector我认为HttpContext.Current.Items实际上使用CallContext在每个逻辑线程中存储对象。 所以我将单例界面更改为: public static SingletonType SingletonInstance { get { return CallContext.GetData(key) as SingletonType; } set { CallContext.SetData(key, value); } } 并在启动任何新线程时简单地覆盖SingletonInstance ! 代码工作正常,但似乎在某种程度上负载很重,CallContext.GetData(key)返回null并且应用程序崩溃与空引用exception! 我在想,如果CallContext.GetData是primefaces的? 但它似乎不对,CallContext是特定于线程的数据存储,必须是primefaces的,否则我就错过了这一点! 我的另一个猜测是设置SingletonInstance(CallContext.SetData)发生在一个线程中,而CallContext.GetData在另一个线程中执行,如此处所述,但我不知道如何/为什么? 更新: 我们将每个在线用户的实例保存在服务器上的arrays中。 单例对象实际上是对表示当前用户的对象的引用。 当前用户必须是唯一的,并且在每个线程中都可用于数据库查询,日志记录,error handling等等,这是如何完成的: public static ApplicationUser CurrentUser { get { […]

具有可触发初始化的C#Singleton模式

我需要一个单身人士: 很懒 是线程安全的 在施工时加载一些值 可以随时查询这些值 初始化可能在查询开始之前的某个精确时间发生 – 所以我必须能够以某种方式从外部触发它。 当然,多次触发应该只进行一次初始化。 我使用.NET 3.5。 我使用静态子类开始使用Jon Skeet的实现 (第5版): public sealed class Singleton { IEnumerable Values {get; private set;} private Singleton() { Values = new[]{“quick”, “brown”, “fox”}; } public static Singleton Instance { get { return Nested.instance; } } private class Nested { // Explicit static constructor to tell C# […]

静态构造函数和Singleton类

我有一个实现Singleton设计模式的对象缓存。 我对单例的方法总是在首次访问属性时延迟加载静态实例。 public static Widget { get { if(instance==null) instance = new Widget(); return instance; } } 但是,我知道这种方法不是线程安全的,并且实例检查为null会导致效率低下。 在实例化静态实例的类上实现静态构造函数是否明智? 据我所知,只要第一次静态属性访问发生,就会调用静态构造函数。 这是否有效,它是否会提供超过当前延迟加载方法的任何好处,或者更好地探索代理实现,还是使用锁来强制它是线程安全的? public static Widget { get { if(instance==null) { lock(padlock) { if(instance==null) instance = new Widget(); } } return instance; } } 我对静态构造函数没有很多经验,所以如果它是延迟加载属性的相同或更差的实现,不要想要实现这个想法。 干杯,加里

c#中的静态类

在回答这个问题时( https://stackoverflow.com/questions/352317/c-coding-question#352327 ),它让我想知道…… 将静态类视为等效于实现单例模式的非静态类实例是否存在任何危险?

如何创建一个只能在C#中拥有单个实例的类

我想知道是否有一种机制或模式只允许C#中的一个类实例。 我听说过Singleton类,但我不知道如何使用它。