Не пробовал, но вы можете посмотреть , зарегистрировать свои просмотры и затем установить данные в процессе активации.
Поскольку представления регистрируются «на лету», синтаксис регистрации не помогает подключиться к событию Activated
, поэтому вам необходимо настроить его в Module
:
class SetViewBagItemsModule : Module
{
protected override void AttachToComponentRegistration(
IComponentRegistration registration,
IComponentRegistry registry)
{
if (typeof(WebViewPage).IsAssignableFrom(registration.Activator.LimitType))
{
registration.Activated += (s, e) => {
((WebViewPage)e.Instance).ViewBag.Global = "global";
};
}
}
}
Это может быть одним из тех предложений типа "единственный инструмент - молоток" от меня; могут быть более простые способы с поддержкой MVC.
Редактировать: Альтернативный подход с меньшим количеством кода - просто подключите к контроллеру
public class SetViewBagItemsModule: Module
{
protected override void AttachToComponentRegistration(IComponentRegistry cr,
IComponentRegistration reg)
{
Type limitType = reg.Activator.LimitType;
if (typeof(Controller).IsAssignableFrom(limitType))
{
registration.Activated += (s, e) =>
{
dynamic viewBag = ((Controller)e.Instance).ViewBag;
viewBag.Config = e.Context.Resolve<Config>();
viewBag.Identity = e.Context.Resolve<IIdentity>();
};
}
}
}
Редактировать 2: Другой подход, который работает непосредственно из регистрационного кода контроллера:
builder.RegisterControllers(asm)
.OnActivated(e => {
dynamic viewBag = ((Controller)e.Instance).ViewBag;
viewBag.Config = e.Context.Resolve<Config>();
viewBag.Identity = e.Context.Resolve<IIdentity>();
});