Ninject, как внедрить объект, живущий в сеансе, в мой бизнес-класс? - PullRequest
0 голосов
/ 29 октября 2010

У меня есть объект профиля в сеансе с информацией профиля для текущего пользователя.Я хочу иметь возможность внедрять его в свои бизнес-классы, чтобы я мог выполнять валидацию и т. Д. В них без необходимости передавать его в список параметров в каждом методе.

Я пробовал что-то подобное в моем модуле ninject:

Profile profile = HttpContext.Current.Session["Profile"] as Profile;
Bind<Profile>().ToConstant(profile).InTransientScope();

Однако, когда я выполняю Kernel.Get () в моем aspx, он взрывается нулевой ссылкой.BusinessObject принимает профиль через конструктор.Если я жестко закодирую профиль, а не использую HttpContext, тогда, похоже, все работает.Не уверен, что ToConstant - это путь, я действительно ищу что-то, что будет оцениваться каждый раз, когда создается новый BusinessObject.

ОБНОВЛЕНИЕ

Кажется, чтозапрос на внедрение в объектный объект уровня страницы слишком рано для того, чтобы коллекция сеансов была доступна.Если я перейду в Kernel.Get к Page_Load, он будет работать нормально.

1 Ответ

5 голосов
/ 29 октября 2010

Я думаю, что с вашим кодом происходит то, что в то время, когда вы создаете привязку, профиль сеанса пуст.

Вам, вероятно, нужно сделать что-то вроде этого:

Bind<Profile>()
    .ToMethod(context => 
        HttpContext.Current.Session["Profile"] as Profile);
...