我有一个类声明了要创建的属性Func
public class ThingWithAFuncProperty
{
public Func<string> CreateSomething { get; set; }
}
我有一个使用ioc容器创建Func并将其注入属性的注入器类:
编辑:抱歉我实际上使用了错误的类型来传递给getFactory,但错误是相同的public class Injector
{
bool IsFuncProperty(PropertyInfo property)
{
return typeof(Func<>).IsAssignableFrom(property.PropertyType);
}
public T FactoryMethod<T>()
{
return this.iocContainer.Resolve<T>();
}
object GetFactory(Type type)
{
var mi = this.GetType().GetMethod("FactoryMethod", BindingFlags.Public |
BindingFlags.Instance | BindingFlags.NonPublic);
var targetMethod = mi.MakeGenericMethod(type);
Type funcType = typeof(Func<>).MakeGenericType(type);
return Delegate.CreateDelegate(funcType, targetMethod);
}
public void Inject(object instance)
{
foreach (var property in instance.GetType().GetProperties())
{
if (IsFuncProperty(property))
{
//property.SetValue(instance, GetFactory(property.PropertyType), null);
var funcArgType = property.PropertyType.GetMethod("Invoke").ReturnType;
property.SetValue(instance, GetFactory(funcArgType), null);
}
}
}
}
它不起作用,我一直在控制代表无法绑定到目标类型的错误,有人可以帮助我让它工作吗
答案 0 :(得分:3)
CreateDelegate(Type, MethodInfo)
创建指定类型的委托以表示指定的静态方法。
这是一个实例方法。所以你需要传入一个实例:
CreateDelegate(funcType, this, targetMethod)