我仍然只是回到.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无法让我满意。
谁能建议我可以在这里采用的方法?我该如何减少正在做的重复(并且必须再次做)并做些重复
更灵活?任何建议表示赞赏。谢谢!