2014-08-28 3 views

ответ

5

Я не использовал StructureMap, но я сделал это с помощью Autofac и SimpleInjector.

Autofac регистрация будет выглядеть следующим образом:

builder.Register(c => HttpContext.Current.GetOwinContext().Authentication).As<IAuthenticationManager>(); 

Регистрация в SimpleInjector выглядит следующим образом:

container.RegisterPerWebRequest(() => HttpContext.Current.GetOwinContext().Authentication); 

И от глядя на StructureMap учебник я могу догадаться, что регистрация там будет что-то вроде этого:

ForRequestedType<IAuthenticationManager>() 
    .TheDefaultIs(() => HttpContext.Current.GetOwinContext().Authentication) 
+0

Это то, что я думал это было бы, но это порождает ошибку как HttpContext.Current.GetOwinContext(). Аутентификация является нулевой. – wmcainsh

+0

Это означает, что вы пытаетесь разрешить 'IAuthenticationManager', прежде чем там будет создан OwinContext для запроса. Обычно это происходит, когда вы пытаетесь разрешить его без http-запроса, то есть в 'Global.asax' – trailmax

+0

. В чем проблема, где я должен это делать? – wmcainsh

8

Это изначально произошло путем преобразования Iden чтобы использовать int как уникальные значения ключей, как описано here.

Затем я расширил это и создал пользовательский AuthenticationManager с помощью IAuthenticationManager.

Я тогда установка StructureMap следующим образом:

For<IAuthenticationManager>() 
    .Use<MyAuthenticationManager>(
    () => new MyAuthenticationManager(HttpContext.Current.GetOwinContext().Authentication)); 

Благодаря @trailmax

+0

Хорошее решение. Декоратор для победы! – trailmax

Смежные вопросы