gpt4 book ai didi

c# - 访问从通过反射调用的方法返回的 IEnumerable 的类型 T 属性

转载 作者:太空狗 更新时间:2023-10-29 22:58:47 26 4
gpt4 key购买 nike

我有一个 .dll 和一个使用上述 .dll 但不直接引用的控制台应用程序,它通过反射加载它。控制台应用程序调用 .dll 中的类的方法。
方法签名是 IEnumerable<Customer> GetAll() ;

在 .dll 中我这样做了:

class CustomerRepository : ICustomerRepository
{
public IEnumerable<Customer> GetAll()
{
using (var db = new DB02Context())
{
List<Customer> list = new List<Customer>();

// some queries to fill the list

return list;
}
}
}

在控制台应用程序中,我已完成此操作:

Assembly assembly = Assembly.LoadFrom(pathToMyDLL);
Type t = assembly.GetType("MyDLL.Models.CustomerRepository");

var methodInfo = t.GetMethod("GetAll");

if(methodInfo == null)
throw new Exception("The method doesn't exists");

var customerRepository = Activator.CreateInstance(t);

// Invoke the GetAll() method
var customerList = methodInfo.Invoke(customerRepository, null);

现在的问题是,因为 GetAll 返回 IEnumerable<Customer>和我的控制台应用程序不“知道”有关 MyDLL.dll 的任何信息(我不直接引用它,所以它不知道 Customer 类型)。

我如何才能访问客户列表以访问客户的属性,而不必显式引用 .dll?

最佳答案

你有三个选择

  1. 移动 Client 或将接口(interface) Client 实现移动到第三个 dll,反射的 DLL 和您的控制台应用程序都可以引用。
  2. 使用 dynamic 关键字作为对象的类型 (dynamic customerList = methodInfo.Invoke(...),这正是它被发明的确切情况。
  3. 将返回类型转换为普通 IEnumerable 并使用反射调用在 object 对象上调用 Client 中的方法 IEnumerable 返回。

关于c# - 访问从通过反射调用的方法返回的 IEnumerable<T> 的类型 T 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25065122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com