Non provato da me, ma potresti prendere in considerazione la registrazione delle tue visualizzazioni e quindi l'impostazione dei dati di visualizzazione durante il processo di attivazione.
Poiché le viste vengono registrate al volo, la sintassi della registrazione non ti aiuta a connetterti Activated
all'evento, quindi dovresti configurarla in 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";
};
}
}
}
Questo potrebbe essere uno di quei suggerimenti del tipo "l'unico strumento è un martello" da me; ci possono essere modi più semplici abilitati per MVC per arrivarci.
Modifica: approccio alternativo, meno codice: basta collegarlo al controller
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>();
};
}
}
}
Modifica 2: un altro approccio che funziona direttamente dal codice di registrazione del controller:
builder.RegisterControllers(asm)
.OnActivated(e => {
dynamic viewBag = ((Controller)e.Instance).ViewBag;
viewBag.Config = e.Context.Resolve<Config>();
viewBag.Identity = e.Context.Resolve<IIdentity>();
});