1、ImpromptuInterface的安装引用
通过Nuget引用,使用Nuget图形管理器=》搜索"ImpromptuInterface"=》找到然后点击"安装"。
相关文档:VS(Visual Studio)中Nuget的使用
2、使用示例代码
通过 ImpromptuInterface,你可以将一个动态对象转换为某个接口的实现,前提是该对象的成员名称和接口一致。
using System;
using ImpromptuInterface;
using Dynamitey;
public interface IMyInterface
{
string Prop1 { get; }
long Prop2 { get; }
Guid Prop3 { get; }
bool Meth1(int x);
}
class Program
{
static void Main()
{
// 匿名类,动态实现 IMyInterface 接口
var anon = new
{
Prop1 = "Test",
Prop2 = 42L,
Prop3 = Guid.NewGuid(),
// Meth1 方法实现
Meth1 =
Return<bool>.Arguments<int>(it => it > 5)
};
// 使用 ImpromptuInterface 动态实现接口
var myInterface = anon.ActLike<IMyInterface>();
// 调用接口的属性和方法
Console.WriteLine($"Prop1: {myInterface.Prop1}");
// 输出: Test
Console.WriteLine($"Prop2: {myInterface.Prop2}");
// 输出: 42
Console.WriteLine($"Prop3: {myInterface.Prop3}");
// 输出: 随机生成的 Guid
Console.WriteLine($"Meth1(4): {myInterface.Meth1(4)}");
// 输出: False
Console.WriteLine($"Meth1(6): {myInterface.Meth1(6)}");
// 输出: True
}
}
或
using System;
using System.Dynamic;
using ImpromptuInterface;
using Dynamitey;
public interface IMyInterface
{
string Prop1 { get; }
long Prop2 { get; }
Guid Prop3 { get; }
bool Meth1(int x);
}
class Program
{
static void Main()
{
// 创建一个动态 Expando 对象
dynamic expando = new ExpandoObject();
// 设置 ExpandoObject 的属性和方法
expando.Prop1 = "Test";
expando.Prop2 = 42L;
expando.Prop3 = Guid.NewGuid();
// 动态方法 Meth1
expando.Meth1 =
Return<bool>.Arguments<int>(it => it > 5);
// 使用 Impromptu.ActLike
//将 ExpandoObject 动态转换为接口 IMyInterface
IMyInterface myInterface =
Impromptu.ActLike<IMyInterface>(expando);
// 调用接口的属性和方法
Console.WriteLine($"Prop1: {myInterface.Prop1}");
// 输出: Test
Console.WriteLine($"Prop2: {myInterface.Prop2}");
// 输出: 42
Console.WriteLine($"Prop3: {myInterface.Prop3}");
// 输出: 随机生成的 Guid
Console.WriteLine($"Meth1(4): {myInterface.Meth1(4)}");
// 输出: False
Console.WriteLine($"Meth1(6): {myInterface.Meth1(6)}");
// 输出: True
}
}