创建一个函数<并将其设置在目标对象上
本文关键字:设置 目标对象 函数 一个 创建 | 更新日期: 2023-09-27 18:11:15
我有一个类,它声明了一个想要创建的属性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);
}
}
}
}
它不工作,我一直保持错误,委托不能绑定到目标类型,有人能帮我让这个工作,请
CreateDelegate(Type, MethodInfo)
创建指定类型的委托,以表示指定的静态方法。
这是一个实例方法。所以你需要传入一个实例:
CreateDelegate(funcType, this, targetMethod)