У меня есть класс, который объявляет свойство 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);
}
}
}
}
Это не работает, и я продолжаю кеттинг ошибки, которую делегат не может привязать к целевому типу,Может кто-нибудь помочь мне заставить это работать, пожалуйста