创建一个函数<并将其设置在目标对象上

本文关键字:设置 目标对象 函数 一个 创建 | 更新日期: 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)