Допустим, у меня есть метод, который требует статического свойства, и я хочу создать модульные тесты, поэтому я переношу его в класс-оболочку. Назовем интерфейс IFoo & конкретным классом Foo.Как получить объект в глубоко вложенный метод, не передавая его через каждый объект?
Теперь, если мой метод вызывается из представления MVC, как вы получаете экземпляр обертки в этот метод?
Очевидно, что я могу добавить параметр IFoo в свой конструктор контроллера, свойство IFoo для моей модели представления и параметр IFoo для моего метода, а затем передать его по цепочке; контроллер, модель просмотра, вид, метод расширения. Мне это не кажется приемлемым.
Так есть ли более чистый способ сделать это?
Я предположил, что контейнер для контейнеров DI - это путь. Честно говоря, я до сих пор не нуждался в нем, и я наивно полагал, что просто добавлю Ninject, привяжу конкретные типы к интерфейсам и сделаю следующий вызов в своем методе.
var dt = kernel.Get<IFoo>();
Я предположил, что это поможет мне избежать всего описанного выше параметра/свойства тротуара. Теперь я знал, что мне все равно нужно получить переменную ядра откуда-то, но я подумал, что я вспомнил, что видел что-то о вызове с помощью области потока/сеанса/запроса. Я думал, что могу создать экземпляр одного и того же экземпляра ядра независимо от того, где он был вызван, но когда я просмотрел его, я узнал, что это только для экземпляров объектов, которые запускает ядро ... не ядро.
Итак, есть ли способ получить экземпляр Foo в метод, не передавая его через кучу объектов, которые ничего не делают, кроме как передать его?
Можете ли вы сделать его более конкретным, пожалуйста? Вы утверждаете, что это произошло несколько раз - наверняка вы можете привести (даже надуманный) пример кода? Также мне больно понять, что вы подразумеваете под «Я узнал, что это только для экземпляров объектов, вызываемых ядром ... не самого ядра. ' –
@RubenBartelink - первая редакция имеет довольно конкретный пример. См. Http://stackoverflow.com/revisions/16124853/1 –
@RubenBartelink - Что касается предложения ядра, я имел в виду, что я знал, что могу сделать kernel.Bind() .ToSelf(). InRequestScope(); чтобы получить тот же Foo на протяжении всего запроса, но не было никакого способа получить одно и то же ядро в течение всего запроса. Поэтому мне пришлось бы пройти через ядро через след, о котором я упоминал в вопросе. Поэтому я ничего не получаю. Имеет ли это смысл? –