首页 > 解决方案 > C# 为所有其他类更改一个类的字段的值

问题描述

我有一个类(A 类),它有一个名为 methodA 的方法。

class A
{
    public Dictionary<string, double> methodA(double param1, double param2)
    {
      //do calculations
      return result;
    }

}

我还有 9 个其他课程(B 类、C 类、....)。它们都有一个名为 myField 的字段。myField 的值是使用 A 类的 methodA 计算的。它们看起来像这样:

class B
{
    private Dictionary<string, double> myField;
    private readonly A a = new A();
    public B()
    {
        myField = a.methodA(param1, param2)
    }
    // methods using myField    
}

param1 和 param2 是永远不会改变并存储在其他地方的值。因此 myField 的值对于所有类和应用程序的整个运行时都是相同的。现在有一个设计变化。methodA 被更新并检查某个条件是否为真,并根据运行时变化的条件和参数 param3、param4 计算 myField 的值。

public Dictionary<string, double> methodA(double param1, double param2, double param3, double param4)
{
    if(condition)
    {
        result = .....
    } else {
        result = .....
    }      
    return result;
}

该条件最初为假,并且在运行时仅更改一次。之后 myField 的值应该保持不变,直到运行结束。

我应该如何在我的类定义中实现这一点,以便 myField 的值在条件为真后更新一次并保持不变直到运行结束?

标签: c#dependency-injectionproperties

解决方案


您添加了依赖注入作为标签,但您没有在示例中使用它。实现它并使 A 类成为具有像单例一样的生命周期的可注入服务(使用接口),然后将其注入到其他类中,瞧,您将在任何地方都有相同的实例,并且具有相同的值。以下是我通常的做法:

Container.RegisterType<IAPICacheManager, APICacheManager>(new ContainerControlledLifetimeManager());

然后神奇地传递给你的构造函数:

public BinanceService(IAPICacheManager apiCache, string instanceName, List<object> tracking, IDataService dataService, IMapper mappingEngine) : base(instanceName, tracking)
    {
        _mappingEngine = mappingEngine;
        _dataService = dataService;

        if (apiCache != null)
        {
            _apiCache = apiCache;

            _cacheEnabled = true;
.....

这是一个帮助您入门的示例: Unity


推荐阅读