【发布时间】:2015-05-16 19:29:57
【问题描述】:
假设我有以下接口和两个实现。
public interface IPerson
{
string Talk();
void Lunch();
}
public class DutchPerson : IPerson
{
public string Talk()
{
return "Ik spreek Nederlands.";
}
public void Lunch()
{
EatBroodjeKroket();
}
private void EatBroodjeKroket()
{
}
}
public class EnglishPerson : IPerson
{
public string Talk()
{
return "I speak English.";
}
public void Lunch()
{
EatFishAndChips();
}
private void EatFishAndChips()
{
}
}
public class ImplementationBuilder<T>
{
private Dictionary<Type, IPerson> _instances;
/// <summary>
///
/// </summary>
/// <param name="instances">Instances that will be used in proxy</param>
public ImplementationBuilder(Dictionary<Type, IPerson> instances)
{
_instances = instances;
}
public void Setup()
{
}
/// <summary>
/// this should return the generated instance
/// </summary>
public IPerson GetProxy()
{
return null;
}
}
我想做的是使用表达式树创建一个新的实现,并混合和匹配来自两个(或更多)实现的方法。基本上我想创建一个实现 IPerson 的代理。所以我传入将要使用的实例,我想使用 Setup 方法来“配置”代理。这基本上是一个列表或字典,每个项目都应该是方法和类型。在使用表达式树生成代理时,应该检查要使用的实现。
所以
谈话,DutchPerson 午餐,英语人
GetProxy 方法将返回(伪代码)
public class MergedInstance : IPerson
{
public void Talk() {
return DutchPerson.Talk()
}
public Lunch() {
EnglishPerson.Lunch()
}
}
我主要想要这个,因为代理实现包含很多方法,我希望能够使用功能标志在实现之间切换。
所以我是不是以错误的方式看待它,使用表达式树这甚至是合理可行的。我正在使用 .NET 4.5.1。
【问题讨论】:
标签: c# expression-trees