我有一个使用Microsoft Identity 2.0和Unity.Mvc进行依赖注入的ASP.NET Web应用程序。
Microsoft Identity 2.0在UserManager
内注册SignInManager
和OwinContext
,并且依赖于HttpContext
。
我想在ManageController
class ManageController
{
public ManageController(IUserManager userManager, ISignInManager signInManager)
{
}
}
然而,这引发了一个例外,因为它们尚未在UnityContainer
中注册。
我没有在UnityContainer
中找到任何方法来注册通过委托初始化的对象的类型。类似的东西
container.RegisterInstance<IUserManager>(() => HttpContext.Current.GetOwinContext().GetUserManager<UserManager>());
我还尝试从OwinContext获取实例并在UnityContainer
var userManager = HttpContext.Current.GetOwinContext().GetUserManager<UserManager>();
container.RegisterInstance<IUserManager>(userManager);
但HttpContext.Current
为null
。
是否有自定义UnityContainer
类型映射行为?
答案 0 :(得分:3)
为此,您可以编写自定义#page-wrapper
并在该扩展程序中添加 HTML {
background: #cccccc;
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
#bounding-wrapper {
min-width: 320px;
width: 100%;
padding: 10px;
}
#content-wrapper {
width: 100%;
margin: 0px;
padding: 0px;
overflow: auto;
height: auto !important;
background-color: blue;
}
#menu-wrapper {
width: 200px;
background-color: orange;
display: inline-block;
}
#page-wrapper {
background-color: green;
display: inline-block;
}
的新策略,在该策略中,您可以覆盖<div id="bounding-wrapper">
<div id="content-wrapper">
<div id="menu-wrapper">
this is in the menu wrapper
</div>
<!-- menu wrapper -->
<div id="page-wrapper">
<p>this is in the page wrapper</p>
</div>
<!-- page wrapper -->
</div>
<!-- content wrapper -->
</div>
<!-- bounding wrapper -->
方法并解析{{1 }}
这就是我在自己项目中的表现:
UnityContainerExtension
有关注册UnityBuildStage.TypeMapping
see this link