Как разрешить параметризованный класс во время выполнения? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть модель вида, подобная этой:

public ViewModelSample(MyClass a)
{
}

Я попытался решить эту проблему следующим образом:

var myClassObj = new MyClass();
var vm = IocManager.Resolve<T>(myClassObj); // where args = object of MyClass

Подпись IIocResolver . T Resolve<T> (object argumentsAsAnonymousType);

Если бы я сделайте это с System.Activator, тогда я бы позвонил return (T)Activator.CreateInstance(typeof(T), myClassObj);, и он отлично работает.

Кроме того, если ViewModelSample имеет только конструктор без параметров, то он действительно разрешает его.

Я получаю исключение:

Отсутствует зависимость. Компонент ViewModels.ViewModelSample имеет зависимость от Dto.MyClass, которая не может быть разрешена. Убедитесь, что зависимость правильно зарегистрирована в контейнере как служба или предоставлена ​​как встроенный аргумент.

MyClass - это простой DTO, поэтому он не наследует ITransientDependency. Более того, я хочу присвоить это значение во время выполнения.

Как мне решить эту проблему?

1 Ответ

1 голос
/ 20 апреля 2020

Подпись IIocResolver . T Resolve<T> (object argumentsAsAnonymousType);

В этом случае new { a = myClassObj }, поскольку a - это имя вашего параметра.

var vm = IocManager.Resolve<ViewModelSample>(new { a = myClassObj });

Ссылка

Анонимные типы: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/anonymous-types

...