Это то, что я хочу от контейнера DI:
public class Class
{
public Class(IDependency dependency, string data) { }
}
var obj = di.Resolve<Class>(() => new Class(null, "test"));
Достопримечательности:
- Можно разрешить как зависимость, так и данные в конструкторе.
- Может использовать синтаксис типа для передачи параметров конструктора (точный синтаксис может отличаться). Да, я могу сделать это сам, получив аргументы конструктора из (Expression.Body как NewExpression), но мне нужен способ определить, какие аргументы зарегистрированы в контейнере.
Другими важными требованиями являются то, что я хочу, чтобы мои компоненты были автоматически подобраны, т.е. я не хочу регистрировать Class - я хочу, чтобы IoC забрал его, потому что он знает, как разрешить IDзависимость.
Кроме того, свойство Injection может быть полезно иногда, но это необязательно.
Вопрос заключается в том, что комбинация функций - иметь все из них - тип-безопасный, параметры, автоматический прием... Легко проверить одну функцию, но комбинация из них непросто проверить, если один знакомый с конкретным контейнером и знает его особенности. Таким образом, вопрос.