在具有不同类型的循环中调用通用方法

时间:2018-11-22 16:03:29

标签: c# .net generics

我仍然只是回到.NET的发展阶段(中断了6年),遇到了一个问题,我觉得我已经快要解决了,但还不能完全解决。

我想做的是重构我编写的代码,这些代码对服务的各个部分进行一些设置。该代码是非常重复的,我必须在另一个地方做类似的事情,所以我认为我应该使其更通用。现在我正在做类似的事情:

public void InitConfiguration()
{
  ...
  myservice.AddPart(s =>
  {
    s.ShouldDoStuff = true;
    s.MethodWithGeneric<SomeType>();
  }

    myservice.AddPart(s =>
  {
    s.ShouldDoStuff = false;
    s.MethodWithGeneric<SomeOtherType>();
  }
  // do this 5 more times
}

所以..我的方法是创建一个MyConfigCollection类的类,该类具有IMyConfig个对象的列表,这些列表具有我需要的成员 为我的服务.AddPart()

interface IMyConfig
{
    public bool ShouldDoStuff {get; set;}
    public Type FooType {get;}
}

public class MyConfig<TFooType> : IMyConfig
{
    public bool ShouldDoStuff {get; set;}
    public Type FooType {get {return typeof(TFooType);}}
}

public class MyConfigCollection
{
   public List<IMyConfig> MyConfigs {get; set;}
}

当我意识到我必须为配置创建接口然后以通用类型实现它时,这种感觉开始变得奇怪 参数以具有不同类型的MyConfig列表。然后,当我尝试使用它时:

public void InitConfiguration(IConfigCollection configurations)
{
    foreach ( IMyConfig config in configurations)
    {
        myservice.AddPart(s => 
        {
            s.ShouldDoStuff = config.ShouldDoStuff;
            // I can't do this!!!
            s.MethodWithGeneric<config.FooType>();
        });
    }
}

我不能做到这一点。我知道泛型是要设置为编译类型的,所以尝试使它具有代码味道 他们充满活力。 myservice的api不能更改(第三方),我也不确定在这里可以采用哪种方法实现目标。 我觉得这是一个已解决的问题,并且存在针对此类情况的最佳做法,但是我的Google-fu无法让我满意。 谁能建议我可以在这里采用的方法?我该如何减少正在做的重复(并且必须再次做)并做些重复 更灵活?任何建议表示赞赏。谢谢!

0 个答案:

没有答案