Тип не найден в кеше: System.Func для ввода типа как Func с использованием MVVMLight SimpleIoc - PullRequest
0 голосов
/ 13 октября 2018

Я регистрирую тип в 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 = null]].

Как конструктор может ввести тип как Func?

Примечание:

Я занимаюсь этим в проекте Xamarin.IOs.NuGet, который я использую для MVVMLight SimpleIoc: this .

1 Ответ

0 голосов
/ 13 октября 2018

Я понял, что, чтобы ввести тип как Func, вам нужно

  • Сначала зарегистрируйте тип
  • Затем зарегистрируйте его как Func (потребляет указанный выше зарегистрированный тип)

То есть

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

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

Тип просто регистрируется таким образом, чтобы он возвратил Func объект MyInjectingClass, который каждый раз получает новый объект.

Guid.NewGuid().ToString() гарантирует, что новый объект MyInjectingClass будет возвращен для метода SimpleIoc.Default.GetInstance<MyInjectingClass>.

...