c# - 如何在 C# 中跨程序集共享对象实例?

标签 c# instantiation sharing

我有一个程序集,其目的是进行基本日志记录。

我有其他程序集引用了这个程序集。

有没有办法在引用程序集中共享一个对象实例? 那么,对于一项日志记录事件,只使用日志记录类的一个实例吗?

例如,如果 Logger 程序集/命名空间中的方法称为 AddInfo()。当程序集 A 有一个需要记录信息的类时,它使用 loggerInstance1.AddInfo() ...当程序集 B 需要做同样的事情时...它重新使用相同的 loggerInstance1 .AddInfo() ... 而不是 loggerInstance2.AddInfo()

最佳答案

...现在来点完全不同的东西。

另一个完全不同的策略是引用 system.web(是的,您甚至可以在桌面应用程序中引用此程序集):

using System.Web;

然后把任何你想“全局共享”的类放到Cache中:

HttpRuntime.Cache.Insert("Logger", LoggingObject, null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);

最后,要获取全局对象的实例,只需将其从缓存中拉出即可:

object LoggingObject = HttpRuntime.Cache.Get("Logger");

砰。即时全局可访问的一次性对象,不需要单例模式。

当然,你也可以稍微改变一下逻辑,尝试获取Logger,如果不存在则第一次创建,放入缓存中以备后用。这仅取决于您是否知道访问顺序。

关于c# - 如何在 C# 中跨程序集共享对象实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524359/

相关文章:

c# - 不向黑客共享连接字符串的最佳方法

c++ - 自动统计一个TMP中实例化类的个数?

ios - 从 iPhone 录制的视频在 FB、Vimeo、Youtube 上旋转 180 度

c# - 如何使用 LINQ 从字符串中获取重复字符数组?

c# - 扩展方法的行为与方法中新对象创建的混淆

c++ - 将数组作为参数传递时,调节内存的最有效方法是什么?

c++ - 强制模板成员函数实例化

android - 在 2 个 android 应用程序之间共享 SQLite 数据库?

c++ - 如何删除对象之间的变量共享?

c# - 计算年和月中的天数?