Как получить реализацию IAuthenticationManager, отображенную в StructureMap
Я изо всех сил пытаюсь использовать 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 всегда равен нулю, но я даже не уверен, что это будет работать, даже если это не равно нулю. Я большой новичок в StructureMap и AspNet Identity, поэтому не стесняйтесь звонить мне по всем глупостям, которые я здесь делаю. Спасибо за вашу помощь!
2 ответа
Ну, похоже, что приведенный выше код работает просто отлично, и я не уверен, почему он не работал раньше. Я не знаю, что такое протокол, чтобы закрыть проблему, но я не хочу, чтобы кто-то думал, что они не могут использовать вышеупомянутое для справки, так как это работает.
На самом деле это не проблема StructureMap. HttpContext.Current будет доступен только внутри HTTP-запроса в ASP.Net. Если вы хотите использовать HttpContext в StructureMap, я бы посоветовал вам либо убедиться, что вы проверяете нулевое значение, либо попытаться переключиться на использование абстракции HttpContextWrapper/HttpContextBase, чтобы вы могли запускать этот код вне ASP.Net в своих тестах.