UnityMvcActivator
вызывается прямо из шлюза при запуске моего приложения MVC, и он создает, настраивает и устанавливает контейнер в DependencyResolver:
DependencyResolver.SetResolver(new UnityDependencyResolver(UnityConfig.Container));
, который сразу регистрирует все типы через:
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterMvcComponents();
}
... но я пытаюсь зарегистрировать типы, которые не создаются, пока немного дальше по дороге:
public static IUnityContainer RegisterMvcComponents(this IUnityContainer container)
{
var lifetimeManager = new HierarchicalLifetimeManager();
container.RegisterInstance<HttpSessionStateBase>(
new HttpSessionStateWrapper(HttpContext.Current.Session), lifetimeManager);
container.RegisterInstance<HttpContextBase>(
new HttpContextWrapper(HttpContext.Current), lifetimeManager);
container.RegisterInstance<HttpServerUtilityBase>(
new HttpServerUtilityWrapper(HttpContext.Current.Server), lifetimeManager);
container.RegisterInstance(HttpContext.Current.User.Identity, lifetimeManager);
return container;
}
Я не могу получить контейнер обратно из DependencyResolver
, когда я наконец сделаю его в свой класс OWIN Startup
- где и происходит вся остальная инициализация - так как я могу зарегистрировать эти типы?
EDIT:
Думая, что я умен, я попытался добавить какое-то действие после запуска к активатору, добавив эту директиву сборки и переместив вызов метода конфигурации во вновь созданный метод:
[assembly: WebActivatorEx.PostApplicationStartMethod(
typeof(CCCS.Admin.Web.Ui.UnityMvcActivator),
nameof(CCCS.Admin.Web.Ui.UnityMvcActivator.PostStart))]
public static void PostStart() => UnityConfig.Container.RegisterMvcComponents();
... и это привело меня на полпути, но User
и Session
все еще недоступны.