C# c中同一应用程序域中的全局静态变量问题#

C# c中同一应用程序域中的全局静态变量问题#,c#,static,C#,Static,我在为我的项目开发公共dll时遇到了一个场景。 假设c#中有四个项目 普罗贾 项目 项目 ProjD 当前设计: ProjA有一个公共静态变量xyz ProjA使用计时器检查一些web服务中的值,并将它们保存在变量xyz中以进行少量验证 ProjA分别在ProjB和ProjC中引用 ProjB和ProjC是一些插件项目,它们基本上是在ProjD中注入了一些插件引擎 因此,正在执行的主要项目是ProjD。现在,我正在使用ProjB和ProjC中的ProjA,它们将各自的值传递给ProjA中

我在为我的项目开发公共dll时遇到了一个场景。 假设c#中有四个项目

  • 普罗贾
  • 项目
  • 项目
  • ProjD
当前设计:

  • ProjA有一个公共静态变量
    xyz
  • ProjA使用计时器检查一些web服务中的值,并将它们保存在变量
    xyz
    中以进行少量验证
  • ProjA分别在ProjB和ProjC中引用
  • ProjB和ProjC是一些插件项目,它们基本上是在ProjD中注入了一些插件引擎
因此,正在执行的主要项目是ProjD。现在,我正在使用ProjB和ProjC中的ProjA,它们将各自的值传递给ProjA中的方法,然后访问ProjA变量
xyz
,它是公共静态的

由于ProjD是在应用程序池中运行的主要应用程序,因此可以从ProjA
xyz
变量中的ProjC访问ProjB中的值集。例如,如果ProjA
xyz
变量对于ProjB为true,那么在ProjC中它也返回true


有什么办法解决这个问题吗?

是的,不要为此使用
public static
属性,
public
每个人都可以访问


一个选项是将
public
属性更改为
internal
,并将您的主应用程序设置为好友程序集,从而允许访问
internal
成员。不过,最好的选择是重新考虑你的设计,因为我认为应该有一些缺陷。如果有某个状态与某个插件相关,那么它应该将该状态保存在一个不是全局的对象中,但范围适当。

我不喜欢使用公共静态来定义变量。因为任何访问类所做的更改都将反映全局。您应该使用
public
来代替它,因为它也可以访问(但需要实例化该类)。

感谢patrick hofman正确编辑我的问题是的,我知道我的设计中存在一些缺陷。但我真的被逻辑迷住了。你能帮我解决这个问题吗?你首先需要弄清楚为什么它需要访问那个变量。你能重写它,使它与另一端进行不同的交互吗?Patrick基本上我正在为我的项目构建一个公共dll,其中包含插件特定的验证值。你可以说是一种授权。因此,当我为ProjB验证某些内容,并且xyz变为true时,它也会为ProjC返回true。你知道如何实施吗?是的,你是对的。但我所需要的只是在同一个场景中工作。