【发布时间】:2014-04-27 20:34:58
【问题描述】:
在使用 OWIN 的 ASP.NET MVC 5 项目中,我有以下内容:
[assembly: OwinStartup(typeof(MvcProj.Site.OwinStartup), "Configure")]
namespace MvcProj.Site {
public partial class OwinStartup {
public void Configure(IAppBuilder application) {
UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);
application.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
CookieSecure = CookieSecureOption.SameAsRequest,
LoginPath = new PathString(url.Action(MVC.User.SignIn())),
ReturnUrlParameter = "redirect"
});
application.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
} // Configure
} // OwinStartup
}
如您所见,我将登录路径定义如下:
LoginPath = new PathString(url.Action(MVC.User.SignIn())),
我从 StructureMap 收到一个错误,说我没有定义 ITranslator ...
事实上它是定义的,但我所有的控制器都是基于 BaseController:
public abstract class BaseController : Controller, ITranslator_ {
public readonly ITranslator _translator;
protected BaseController() {
_translator = ObjectFactory.Container.GetInstance<ITranslator>();
} // BaseController
public String _(String value) {
return _translator.Translate(value);
} // _
}
所以我认为 Owin 在 global.asax 应用程序启动中的 IoC 代码之前运行。
如果我删除代码行 LoginPath = new PathString(url.Action(MVC.User.SignIn())) 那么一切正常。
有人可以告诉我如何解决这个问题吗?
谢谢,
米格尔
【问题讨论】:
-
不应在构造函数中调用
ObjectFactory.Container.GetInstance<ITranslator>(),而应将ITranslator实例传递给它。
标签: asp.net-mvc owin