Обычно полезно понимать основы внедрения зависимостей (DI) вместо того, чтобы полагаться на определенные функции контейнера DI. Задайте себе вопрос: Если бы у меня не было DI-контейнера, то как бы я решил мою проблему?
По иронии судьбы, получается, что с все намного проще. Чистый DI .
Если у вас не было DI-контейнера, то как бы вы выполняли действие после создания объекта?
Самое простое решение - предоставить фабрику, которая создает и инициализирует объект. Принимая во внимание тот же API и требования, что и в документации Autofa c, подразумевается , вы можете сделать это:
public static Dependency2 CreateDependency2(ITestOutputHelper output, Dependency1 dependency)
{
var d2 = new Dependency2(ITestOutputHelper output, Dependency1 dependency);
d2.Initialize();
return d2;
}
Если вам все еще нужно использовать другой DI-контейнер, большинство из них позволяют вам зарегистрировать фабрику, как указано выше, против типа. Я не знаю, как работает MvvmCross, но я бы удивился, если бы это было невозможно. Если это не так, вы можете реализовать Adapter поверх вашей фактической зависимости. Адаптер позаботится о запуске действия над адаптированным объектом.
FWIW: если объект не находится в допустимом состоянии, прежде чем выполнить какое-либо действие с ним, инкапсуляция нарушается. Фундаментальная характеристика c инкапсуляции состоит в том, что объекты защищают свои инварианты, так что они никогда не могут находиться в недопустимых состояниях. Если возможно, рассмотрите лучший дизайн API.