如何访问用户配置在_layout查看(How to access UserProfile in _L

2019-10-18 15:00发布

在我的MVC应用程序我有一个显示菜单为用户的共享文件_Layout.cshtml

该视图我想要显示从用户配置实体的信息 - 使用SimpleMembership创造的,因此链接到可以直接在页面_layout访问的用户的IPrincipal。

所以我写了一个扩展方法,使我的UnitOfWork打电话,看起来像这样:

    public static UserProfile GetUserProfile(this IPrincipal u)
    {
        IUnitOfWork uow = new UnitOfWork();
        return uow.UserRepository.GetUserProfile(u);            
    }

现在这个工作,但因为我在实例化的UnitOfWork,而不是将其注入并不好闻....

我有一个BaseController类,看起来像这样:

public class BaseController : Controller
{
    // NOT NECESSARY TO DISPOSE THE UOW IN OUR CONTROLLERS
    // Recall that we let IoC inject the Uow into our controllers
    // We can depend upon on IoC to dispose the UoW for us
    protected MvcApplication.Data.Contracts.IUnitOfWork _Uow { get; set; }
}

(我以我的一些代码对这样的回答: https://stackoverflow.com/a/12820444/150342 )

我用包管理器安装StructureMap这个代码运行在应用程序启动:

public static class StructuremapMvc
{
    public static void Start()
    {
        IContainer container = IoC.Initialize();
        DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
        GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container);
    }
}

据我所知,这将给我具体的UnitOfWork类为我的控制器,并处理与处置的的UnitOfWork。

不幸的是,据我的国际奥委会的理解去,我不知道该怎么做,如果我想从除控制器之外的其他地方访问的UnitOfWork - 或者我是否可以传递我的控制器的信息到_layout。 我想获得的数据到_layout页,我感到困惑如何从那里访问的UnitOfWork,或如何注入到的UnitOfWork扩展方法

Answer 1:

放入ViewBag的数据,并让_layout观点把它从那里。

你可以把这个在您的BaseController

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
    var u = requestContext.HttpContext.User;
    var data = _UoW.UserRepository.GetUserProfile(u);

    ViewBag.UserData = data;
}

而在你的布局视图渲染的数据:

@ViewBag.UserData 


文章来源: How to access UserProfile in _Layout View