With.Parameters.ConstructorArgument с ninject 2.0

Как использовать эту функциональность в Ninject 2.0?

MyType obj = kernel.Get<MyType>(With.Parameters.ConstructorArgument("foo","bar"));

"С" там нет :(


person andrecarlucci    schedule 03.09.2009    source источник


Ответы (2)


Я не уверен, поддерживает ли его Ninject (в настоящее время я не использую свой компьютер для разработки), но если все остальное не работает (документация Ninject оставляет желать лучшего), вы можете отделить инициализацию от конструктора, чтобы решить свою проблему:

class MyType 
{
   public class MyType() {}
   public class MyType(string param1,string param2){Init(param1,param);}
   public void Init(string param1,param2){...}
}

Тогда вы можете сделать это:

MyType obj = kernel.Get<MyType>();
obj.Init("foo","bar");

Это далеко не идеально, но в большинстве случаев должно работать.

person Adrian Grigore    schedule 03.09.2009
comment
Спасибо за ответ, но, к сожалению, я не могу вызвать конструктор своего объекта без этого параметра ... Ninject 1.x отлично справляется со своей задачей, я хотел бы знать, как эта функция изменилась в версии 2.0. - person andrecarlucci; 03.09.2009

person    schedule
comment
Могу ли я передать параметры объекту глубоко в графе объекта с помощью ResolveAtGet? - person Zach; 29.05.2012
comment
Вызов метода Get передает параметры только разрешаемому элементу верхнего уровня. Кроме того, если вы хотите, чтобы параметры передавались объектам глубже в цепочке, вам придется сделать это в привязке. - person Ian Davis; 29.05.2012
comment
@Zach (и Ян, но он это знает!) Есть перегрузка в базовом ctor WithConstructorArgument / ConstuctorArgumetn, который позволяет помечать аргументы как унаследованные, что заставляет их распространяться в дочерние разрешения, как я думаю, вы хотите. (В общем, это неправильный подход и вызовет беспорядок, но он определенно там) - person Ruben Bartelink; 29.05.2012