ASP.NET MVC + Unity 2.0: ленивая загрузка свойств зависимости? - PullRequest
3 голосов
/ 30 мая 2011

То, что я хочу сделать в Unity 2.0, - это создать то, что мне нужно, постоянно получая новые свойства из конфигураций, что довольно сложно объяснить.

В основном это то, что я хочу сделать:

global.asax

container.RegisterType<IBackendWrapper, BackendWrapper>(new InjectionProperty("UserIdent", (HttpContext.Current.Session == null ? new UserIdent() : HttpContext.Current.Session["UserIdent"] as UserIdent)));           

Я хочу, чтобы это было так, что всякий раз, когда кому-то нужен IBackendWrapper, Unity должен затем получить Session ["UserIdent"] и заполнить BackendWrapper этой информацией.

В данный момент Unity загружает эту информацию только один раз, и он всегда возвращает новый UserIdent, даже если в сеансе хранится идентификатор пользователя. Есть ли способ получить такое поведение в Unity 2.0? или это поддерживается другой платформой IoC, такой как NInject?

1 Ответ

3 голосов
/ 30 мая 2011

Да, это поддерживается в Unity. Вам необходимо зарегистрировать UserIdent с InjectionFactory, чтобы оно оценивалось при каждом разрешении.

container
    .RegisterType<UserIdent>(new InjectionFactory(c =>
    {
        return HttpContext.Current.Session == null
            ? new UserIdent()
            : HttpContext.Current.Session["UserIdent"] as UserIdent;
    }));

container
    .RegisterType<IBackendWrapper, BackendWrapper>(
        new InjectionProperty("UserIdent", new ResolvedParameter<UserIdent>())
    );

То, как вы его регистрировали, HttpContext.Current.Session оценивалось в то время, когда вы выполняли регистрацию, которая предположительно находится в Global.asax до того, как ваш сеанс был настроен.

...