Von mir nicht ausprobiert, aber Sie könnten versuchen, Ihre Ansichten zu registrieren und dann die Ansichtsdaten während des Aktivierungsprozesses festzulegen.
Da Ansichten im laufenden Betrieb registriert werden, hilft Ihnen die Registrierungssyntax beim Herstellen einer Verbindung zum Activated
Ereignis nicht. Sie müssen sie daher wie folgt einrichten 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";
};
}
}
}
Dies könnte einer der Vorschläge vom Typ "Nur ein Werkzeug ist ein Hammer" von mir sein. Möglicherweise gibt es einfachere MVC-fähige Möglichkeiten, um darauf zuzugreifen.
Bearbeiten: Alternativer Ansatz mit weniger Code - einfach an den Controller anschließen
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>();
};
}
}
}
Edit 2: Ein weiterer Ansatz, der direkt vom Controller-Registrierungscode aus funktioniert:
builder.RegisterControllers(asm)
.OnActivated(e => {
dynamic viewBag = ((Controller)e.Instance).ViewBag;
viewBag.Config = e.Context.Resolve<Config>();
viewBag.Identity = e.Context.Resolve<IIdentity>();
});