我很难同时使用StructureMap和Microsoft AspNet Identity,因为我似乎不知道如何映射IAuthenticationManager的实现。根据下面的例子,我试图在DefaultRegistry中显式映射它。
public class DefaultRegistry : Registry {
public DefaultRegistry() {
Scan(
scan => {
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.With(new ControllerConvention());
});
For<IAuthenticationManager>().Use(() => HttpContext.Current.GetOwinContext().Authentication);
}
}
主要的问题是HttpContext.Current总是为null,但我甚至不确定这是否有效,即使它不是null。我是StructureMap和AspNet Identity的新手,所以如果我在这里做任何愚蠢的事情,请随时给我打电话。谢谢你的帮助!
这本身并不是StructureMap的问题。HttpContext.Current只能在ASP.Net中的HTTP请求中使用。如果您想在StructureMap中使用HttpContext,我建议您要么确保优雅地检查null,要么尝试切换到使用HttpContextWrapper/HttpContextBase抽象,这样您就可以在测试中在ASP.Net之外运行该代码。
上面的代码似乎运行得很好,我不确定为什么它以前似乎不起作用。我不知道解决这个问题的协议是什么,但我不希望任何人认为他们不能使用上面的内容作为参考,因为它是有效的。