首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自C#,Type>的Dictionary<Type,Type>绑定

来自C#,Type>的Dictionary<Type,Type>绑定
EN

Stack Overflow用户
提问于 2017-10-20 04:50:52
回答 1查看 125关注 0票数 0

我在我的项目中使用Ninject lib。我有一个任务:我需要通过传递字典将接口绑定到服务,我更喜欢使用反射。

在没有反映的情况下,这样做是:

代码语言:javascript
复制
kernel.Bind<IUser>().To<User>();

其中IUser -界面,用户- IUser实现。

经过反思,我这样做了:

代码语言:javascript
复制
MethodInfo method = kernel.GetType().GetMethods().FirstOrDefault(x=>x.Name == "Bind");
MethodInfo genericBind = method.MakeGenericMethod(bind.Key);
MethodInfo bindResult = genericBind.Invoke(kernel,null).GetType().GetMethods().FirstOrDefault(x => x.Name == "To" && x.IsGenericMethod == true);
MethodInfo genericTo = bindResult.MakeGenericMethod(bind.Value);
genericTo.Invoke(kernel, null); //Error is here

但是我得到了一个错误System.Reflection.TargetException。

怎么啦?

对不起,我的英语:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-20 08:47:20

您的问题是,您正在调用内核对象上的方法,而不是方法的结果。这会解决你的问题

代码语言:javascript
复制
MethodInfo method = kernel.GetType().GetMethods().FirstOrDefault(x=>x.Name == "Bind");
MethodInfo genericBind = method.MakeGenericMethod(bind.Key);
var result = genericBind.Invoke(kernel,null);
MethodInfo bindResult = result.GetType().GetMethods().FirstOrDefault(x => x.Name == "To" && x.IsGenericMethod == true);
MethodInfo genericTo = bindResult.MakeGenericMethod(bind.Value);
genericTo.Invoke(result, null); //Error is here

但是所有这些都是不必要的,因为绑定函数有一个非泛型实现kernel.Bind(typeof(IUser)).To(typeof(User)),所以您可以只执行kernel.Bind(bind.Key).To(bind.Value)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46842560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档