MVVM SimpleIoc, как использовать интерфейс, когда для реализации интерфейса требуются параметры конструкции
Используя MVVM SimpleIoc, я хотел бы зарегистрировать реализацию для данного интерфейса, но для реализации требуется один параметр в его конструкторе:
public class MyServiceImplementation : IMyService {
public MyServiceImplementation(string contructorString) { ... }
}
Я надеялся, что регистрация реализации интерфейса будет работать, но SimpleIoc не рассматривает подсказку, когда пытается устранить интерфейс.
SimpleIoc.Default.Register<MyServiceImplementation>(() => {
return new MyServiceImplementation("Hello World");
});
SimpleIoc.Default.Register<IMyService, MyServiceImplementation>();
Будет ли способ сделать это с помощью SimpleIoc, или я должен использовать более полный Ioc?
Изменить: Это трюк, но я все еще удивляюсь, почему форма выше не работает.
SimpleIoc.Default.Register<IMyService>(() => {
return new MyServiceImplementation("Hello World");
});
Ответы
Ответ 1
Причина, по которой ваш первый подход не работает, заключается в том, что SimpleIOC не использует себя для построения объектов.
Учитывая ваше объявление
SimpleIoc.Default.Register<MyServiceImplementation>(() => {
return new MyServiceImplementation("Hello World");
});
SimpleIoc.Default.Register<IMyService, MyServiceImplementation>();
Вызов SimpleIoc.Default.GetInstance<MyServiceImplementation>()
будет выполнять метод factory, а вызов SimpleIoc.Default.GetInstance<IMyService>()
- нет.
Возможным способом цепочки вызовов может быть указание метода factory для обоих типов, IMyService
и MyServiceImplementation
, т.е.
SimpleIoc.Default.Register<MyServiceImplementation>(() => {
return new MyServiceImplementation("Hello World");
});
SimpleIoc.Default.Register<IMyService>(() => {
return SimpleIoc.Default.GetInstance<MyServiceImplementation>();
});