No lo he probado, pero es posible que desee registrar sus vistas y luego configurar los datos de la vista durante el proceso de activación.
Debido a que las vistas se registran sobre la marcha, la sintaxis de registro no lo ayuda a conectarse al Activated
evento, por lo que deberá configurarlo en un 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";
};
}
}
}
Esta podría ser una de esas sugerencias mías del tipo "la única herramienta es un martillo"; puede haber formas más simples habilitadas para MVC para hacerlo.
Editar: enfoque alternativo, menos código, solo conéctelo al controlador
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>();
};
}
}
}
Edición 2: otro enfoque que funciona directamente desde el código de registro del controlador:
builder.RegisterControllers(asm)
.OnActivated(e => {
dynamic viewBag = ((Controller)e.Instance).ViewBag;
viewBag.Config = e.Context.Resolve<Config>();
viewBag.Identity = e.Context.Resolve<IIdentity>();
});