Chưa thử bởi tôi, nhưng bạn có thể xem đăng ký chế độ xem của mình và sau đó thiết lập dữ liệu chế độ xem trong quá trình kích hoạt.
Bởi vì lượt xem được đăng ký nhanh chóng, cú pháp đăng ký không giúp bạn kết nối với Activated
sự kiện, vì vậy bạn cần thiết lập nó trong 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";
};
}
}
}
Đây có thể là một trong những gợi ý kiểu "công cụ duy nhất là một cái búa" từ tôi; có thể có những cách đơn giản hơn hỗ trợ MVC để thực hiện nó.
Chỉnh sửa: Cách tiếp cận thay thế, ít mã hơn - chỉ cần đính kèm vào Bộ điều khiển
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>();
};
}
}
}
Chỉnh sửa 2: Một cách tiếp cận khác hoạt động trực tiếp từ mã đăng ký bộ điều khiển:
builder.RegisterControllers(asm)
.OnActivated(e => {
dynamic viewBag = ((Controller)e.Instance).ViewBag;
viewBag.Config = e.Context.Resolve<Config>();
viewBag.Identity = e.Context.Resolve<IIdentity>();
});