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

Jar*_*Bot 2 c# instantiation sharing

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

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

有没有办法在引用程序集之间共享对象实例?那么,对于一个日志活动,只使用日志类的一个实例?

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

Fli*_*ter 6

......现在是完全不同的东西。

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

using System.Web;
Run Code Online (Sandbox Code Playgroud)

然后将您想要“全局共享”的任何类放入缓存中:

HttpRuntime.Cache.Insert("Logger", LoggingObject, null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);
Run Code Online (Sandbox Code Playgroud)

最后,要获取全局对象的实例,只需从缓存中提取它:

object LoggingObject = HttpRuntime.Cache.Get("Logger");
Run Code Online (Sandbox Code Playgroud)

营商事工。即时全局可访问、一次性使用的对象,不需要单例模式。

当然,您也可以稍微更改逻辑以尝试获取 Logger,如果它不存在,则第一次创建它并将其放入缓存以备将来使用。这仅取决于您是否知道访问顺序。