Impromptu是一个动态生成代码实现接口的库,可以非常方便我们实现DuckType编程:
public interface IUser
{
string Name { get; set; }
int Age { get; set; }
string Address { get; set; }
}
var obj = new { Name = "jone", Age = 28 };
IUser user = Impromptu.ActLike<IUser>(obj);
Console.WriteLine(user.Name);
其原理是内部用Emit来动态生成了一个实现该接口的对象,从而实现接口的封装。利用这个特性,我们可以把Impromptu和ExpandoObject结合使用,从而非常方便的动态实现接口。
var user = Impromptu.ActLike<IUser>(new
ExpandoObject());
user.Name = "jone";
Console.WriteLine(user.Name);