访问通过反射调用的方法返回的IEnumerable <T>的T型属性

favner85

我有一个.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类型)。

如何访问客户列表以访问Customer'a属性,而不必显式引用.dll?

斯科特·张伯伦

您有三种选择

  1. Client接口Client工具移至或移至第三个dll,反射的DLL和您的控制台应用程序都可以引用该文件。
  2. 使用dynamic关键字作为对象(dynamic customerList = methodInfo.Invoke(...的类型,这正是它被发明的目的。
  3. 将返回类型强制转换为普通类型,IEnumerable并使用反射调用返回对象Client调用方法objectIEnumerable

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何返回T型?

来自分类Dev

如何从泛型方法<T>() 返回泛型 List<T>

来自分类Dev

通过反射调用具有Class <T>类型参数的私有方法

来自分类Dev

如何从声明为IEnumerable <T>的方法/属性中安全地返回List <T>?

来自分类Dev

使用IEnumerable <T>的参数调用通用方法

来自分类Dev

通过反射访问/执行泛型方法?

来自分类Dev

通过反射调用本地泛型方法

来自分类Dev

泛型方法 T 扩展

来自分类Dev

Kotlin:泛型,反射和T型与T型之间的区别:任何

来自分类Dev

我如何设置模仿Repository返回方法以返回IEnumerable <T>?

来自分类Dev

如何使用表达式树调用反射的Func <T,T>属性

来自分类Dev

IEnumerable <T>的扩展方法,该方法返回-this-的类型

来自分类Dev

通过反射通过表达式调用泛型方法

来自分类Dev

Swift中类型T的泛型调用

来自分类Dev

泛型T调用重载函数

来自分类Dev

根据特定的属性值以通用方法获取IEnumerable <T>

来自分类Dev

写的Javadoc返回型“可选<T>”

来自分类Dev

泛型 - 如何返回 T 的映射?

来自分类Dev

类属性可以是T还是IEnumerable <T>?

来自分类Dev

通过std :: enable_if_t传递被调用方法的返回值

来自分类Dev

优雅的C#方法从bool TryParse <T>(Input,out T)和input [,]函数返回IEnumerable <T>

来自分类Dev

将内部集合返回为IEnumerable <T>的标准方法

来自分类Dev

使用反射将IEnumerable转换为IEnumerable <T>

来自分类Dev

如何调用以泛型T []作为参数的方法?

来自分类Dev

使用泛型Func <T>的异步方法

来自分类Dev

IEnumerable <T>与IReadOnlyList <T>

来自分类Dev

List <T>与IEnumerable <T>

来自分类Dev

List <T>与IEnumerable <T>

来自分类Dev

其中T:IEnumerable <T>方法约束

Related 相关文章

热门标签

归档