ASP.NET MVC + Unity 2.0:延迟加载依赖属性?

时间:2011-05-30 14:08:52

标签: c# .net asp.net-mvc-3 dependency-injection unity-container

我希望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 个答案:

答案 0 :(得分:3)

是的,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中进行的。