Как получить реализацию 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 в своих тестах.

Другие вопросы по тегам