मेरे द्वारा अन-ट्राई किया गया, लेकिन आप अपने विचारों को पंजीकृत करने और फिर सक्रियण प्रक्रिया के दौरान दृश्य डेटा सेट करने पर विचार कर सकते हैं ।
क्योंकि दृश्य ऑन-द-फ़्लाई में पंजीकृत हैं, पंजीकरण सिंटैक्स आपको 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>();
});