我有一个程序集,其目的是进行基本日志记录。
我有其他程序集引用了这个程序集。
有没有办法在引用程序集中共享一个对象实例? 那么,对于一项日志记录事件,只使用日志记录类的一个实例吗?
例如,如果 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/