У меня есть проект, созданный из Boilerplate
У меня есть класс MySession, который будет использоваться из MvcControllers и контроллеров WebApi.
В MySession есть два производных класса:
MySessionMvc:
public override string UserId {
get {
return Thread.CurrentPrincipal.Identity.GetUserId();
}
}
и
MySessionWebApi:
public override string UserId {
get {
System.Web.HttpContext.Current.Request.Headers["UserId"];
}
}
Я регистрирую оба класса:
IocManager.RegisterIfNot<IMySession, MySessionMvc>(DependencyLifeStyle.Singleton, "MyNamespace.MySessionMvc");
IocManager.RegisterIfNot<IMySession, MySessionWebApi>(DependencyLifeStyle.Singleton, "MyNamespace.MySessionWebApi");
Теперь этовремя сказать, какой производный класс MySession будет использоваться для соответствующего контроллера.
«Ужасное» решение, внедрить контейнер в каждый контроллер и использовать его
Теперь я вижу, что могу легковведите его в мой контроллер
protected MyBaseController(IWindsorContainer container)
{
MySession = container.Resolve<IMySession> "MyNamespace.MySessionWebApi");
}
И на уровне контроллера я достигну своей цели.
С другой стороны, я должен сказать Auditor-перехватчику сказать то же самое разрешение зависимостей.Этот перехватчик получает информацию об идентификаторе пользователя из MySession.
namespace My.Auditing
{
internal class AuditingInterceptor : IInterceptor
{
public IMySession MySession { get; set; }
}
}
Как я могу продолжить, чтобы я мог правильно разрешить соответствующую MySession на уровне перехватчика?