C# 从不同名称空间中的不同类访问变量

C# 从不同名称空间中的不同类访问变量,c#,mvvm,internals,C#,Mvvm,Internals,我有一个MVVM应用程序,我需要在某个地方声明一个变量,并从程序集中的任何地方访问它,也就是说,从不同名称空间中的不同类访问它。我试图在主类中声明一个内部变量,但它不起作用。有什么想法吗?听起来你想要一个简单的“服务” 您可以在需要时注入: using en.my.services; // Make Service namespace known namespace en.my.clients { public class MyServiceClient {

我有一个MVVM应用程序,我需要在某个地方声明一个变量,并从程序集中的任何地方访问它,也就是说,从不同名称空间中的不同类访问它。我试图在主类中声明一个内部变量,但它不起作用。有什么想法吗?

听起来你想要一个简单的“服务”

您可以在需要时注入:

using en.my.services; // Make Service namespace known

namespace en.my.clients 
{
    public class MyServiceClient
    {
        VariableService svc = null;

        public MyServiceClient ( VariableService varsserv ) // <- Parameter-Injection via 
                                                            // your DI Framework
        {   
            svc = varserv;
        }

        public void SomeMethod()
        {
            svc.SomeVariable = "Update";
        }
    }
}
使用en.my.services;//公开服务名称空间
名称空间en.my.clients
{
公共类MyServiceClient
{
VariableService svc=null;

public MyServiceClient(VariableService varsserv)//使用
public
variables
internal
方法创建一个
public类
,该类在该程序集中可见。您需要的是一个全局可见的
public
变量。此外,如果您需要相同的变量(相同的值和全部)无论在哪里,你都应该使它成为公共静态的。你想要一个能够在需要的地方注入的服务。你是如何声明变量的?你是如何尝试访问它的?到目前为止你尝试了什么?请提供一些代码是的,我已经使用接口和DI完成了,但是一旦你实例化了类MyServiceClient(MyServiceClient=new MyServiceClient(new VariableService()))如果VariableService是一个具有构造函数并实现接口的类,那么我需要从放置在不同名称空间中的不同类访问无处不在的客户端变量。如何做到这一点?您可以在任何需要的地方注入服务类。只需告诉您的DI框架,它将使其成为单例。请记住,它不会线程安全开箱即用。我只需要注入一次,然后在任何地方都使用相同的变量“Client”。然后你就有了问题。在需要的地方注入。这就是该模式背后的想法。好的,我终于按照你的建议做了。我想这是唯一的方法。thx。
using en.my.services; // Make Service namespace known

namespace en.my.clients 
{
    public class MyServiceClient
    {
        VariableService svc = null;

        public MyServiceClient ( VariableService varsserv ) // <- Parameter-Injection via 
                                                            // your DI Framework
        {   
            svc = varserv;
        }

        public void SomeMethod()
        {
            svc.SomeVariable = "Update";
        }
    }
}