在缓存中找不到类型:System.Func,用于使用MVVMLight SimpleIoc将类型作为Func注入

时间:2018-10-13 16:39:13

标签: mvvm-light simpleioc

我正在 MVVMLight SimpleIoc 中注册类型,

SimpleIoc.Default.Register<MyInjectingClass>();

然后我将这种类型的构造函数注入为Func

public class MyConsumerClass
{
    readonly Func<MyInjectingClass> _injectingClassFactory;

    public MyConsumerClass(Func<MyInjectingClass> injectingClassFactory)
    {
        _injectingClassFactory = injectingClassFactory;
    }
}

但是在运行时,我遇到了这个错误

  

在缓存中找不到类型:   System.Func`1 [[<...>。MyInjectingClass,   <...>,版本= 1.0.0.0,文化=中性,PublicKeyToken =空]]。

如何构造函数将类型作为Func注入?

注意:

我正在Xamarin.IOs项目中执行此操作。 我用于MVVMLight SimpleIoc的NuGet是this

1 个答案:

答案 0 :(得分:0)

我发现,要注入类型为Func,则必须

  • 首先注册类型
  • 然后将其注册为Func(使用上述注册类型)

也就是说,

SimpleIoc.Default.Register<MyInjectingClass>(); // should happen first

SimpleIoc.Default.Register<Func<MyInjectingClass>>(
    () => () => SimpleIoc.Default.GetInstance<MyInjectingClass>(
        Guid.NewGuid().ToString()
    ));

只需简单地注册该类型,就可以告诉它返回 MyInjectingClass Func对象,该对象每次都检索一个 new 对象。

Guid.NewGuid().ToString()确保为SimpleIoc.Default.GetInstance<MyInjectingClass>方法返回一个新的 MyInjectingClass 对象。