可在C#

时间:2018-08-12 13:57:35

标签: c#

基本上我想做的是设置某个方法返回的某个变量的值,然后在多个类,方法中使用该var。让我用代码解释。

我有一个像下面这样的班级

public class Data : Controller
{
  public void Get(ref string somevariable)
  {
       somevariable = consuming some api here

  }
}

然后,我还有两个类希望使用上述方法设置的值,而无需两次调用该方法:

public class Data2 : Controller
{
  public void Get2()
  {
    data.Get(ref string somevariable);
    Console.WriteLine(somevariable);
  }
}

public class Data3 : Controller
{
  public void Get3()
  {
   data.Get(ref string somevariable);
    Console.Writeline(somevariable);
  }
}

1 个答案:

答案 0 :(得分:0)

不推荐,但是最简单的方法是使用某些类的静态方法:

static class CachedDataProvider
{
    private static string response = null;

    public static string GetData()
    {
        if (response == null)
        {
            // consuming some api here
            response = "example response data";
        }

        return response;
    }

    public static void Invalidate()
    {
        response = null;
    }
}

然后在您的控制器中使用它:

public class Data : Controller
{
    public void Get(ref string somevariable)
    {
        somevariable = CachedDataProvider.GetData();
    }
}

更好的方法是使用通过依赖性注入向控制器注入的服务。这样,提供程序就不会是静态的,需要将其配置为共享实例(每个应用程序运行一个实例)。

public class Data : Controller
{
    private CachedDataProvider dataProvider;

    public Data(CachedDataProvider dataProvider)
    {
        this.dataProvider = dataProvider;
    }

    public void Get(ref string somevariable)
    {
        somevariable = this.dataProvider.GetData();
    }
}

在两种情况下,您都需要解决对共享状态的并行访问(更新提供商的数据)。例如,如果您的控制器表示ASP.NET MVC,则每个请求都在不同的线程上处理。