基本上我想做的是设置某个方法返回的某个变量的值,然后在多个类,方法中使用该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);
}
}
答案 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,则每个请求都在不同的线程上处理。