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 } }