我希望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?
答案 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中进行的。