C# 从两个外部库引用的静态类-每个库都可以看到它';s";“拥有”;版本

C# 从两个外部库引用的静态类-每个库都可以看到它';s";“拥有”;版本,c#,C#,我正在我的项目中使用第三方库。我的项目还有一个插件系统,允许用户创建自己的插件,并在运行时动态加载: var plugin = Assembly.LoadFrom(pathToPluginDLL); // later on, the constructor from the user plugin is loaded pluginConstructor.Invoke(); 我有一个场景,其中一个用户插件引用了我的主要项目使用的同一个第三方库。该第三方库有一个静态对象,该对象对于主项目和用户插件

我正在我的项目中使用第三方库。我的项目还有一个插件系统,允许用户创建自己的插件,并在运行时动态加载:

var plugin = Assembly.LoadFrom(pathToPluginDLL);
// later on, the constructor from the user plugin is loaded
pluginConstructor.Invoke();
我有一个场景,其中一个用户插件引用了我的主要项目使用的同一个第三方库。该第三方库有一个静态对象,该对象对于主项目和用户插件都必须是唯一的

下面是一个快速生成的代码示例:

// This is a class within a 3rd party DLL, referenced directly from the main project
public class SomeClassWithStaticObjects
     public static string staticString {get; set;}
}

// In the main project
SomeClassWithStaticObjects.staticString = "main project static string";
在引用同一第三方DLL的其中一个用户插件中:

SomeClassWithStaticObjects.staticString = "plugin project static string";   

问题在于
SomeClassWithStaticObjects.staticString
在主项目和使用反射加载的插件之间引用相同的静态对象。有没有一种方法可以将用户插件“隔离”在它自己的内存空间中,这样它就拥有了它自己的静态类的唯一版本?

如果一个静态类的两个实例位于不同的内存空间中,您可以拥有两个不同的实例

这方面可能有很多过时的文档

可能也有帮助


我真的很好奇这个库是什么造成了这个问题。这似乎是错的。

如果一个静态类有两个单独的实例,那么它们位于不同的位置

这方面可能有很多过时的文档

可能也有帮助


我真的很好奇这个库是什么造成了这个问题。它似乎是关闭的。

非静态对象:)即。。。。避免全局问题是什么(如果没有解决,结果会很糟糕)?您可以尝试使用适配器模式包装它。这将有助于使所有这些外部对象在代码中看起来更正交。这将在你的应用程序中促进一套更统一的代码,我希望…@KeithNicholas寻找非痛苦和可靠的模式并不有趣:)这就是为什么<代码>静态属性不好。非静态对象:)即。。。。避免全局问题是什么(如果没有解决,结果会很糟糕)?您可以尝试使用适配器模式包装它。这将有助于使所有这些外部对象在代码中看起来更正交。这将在你的应用程序中促进一套更统一的代码,我希望…@KeithNicholas寻找非痛苦和可靠的模式并不有趣:)这就是为什么
静态
属性不好的原因。“唯一”这显然是错误的,因为只要您设法从不同的地方加载强类型版本(即从GAC加载),您就可以拥有任意多的强类型版本,否则单独的appdomains确实是一个很好的解决方案这显然是错误的,因为只要您设法从不同的地方加载强类型版本(即从GAC加载),就可以拥有任意多的强类型版本,否则单独的appdomains确实是一个很好的解决方案。