【发布时间】:2015-02-27 16:02:32
【问题描述】:
我有一个 MVC WebApi owin(软托管)项目,它使用 Unity 解决控制器依赖关系
看起来像这样
public class PacientaiController : ODataController
{
private readonly IEntityRepo<Ent.Pacientas> repo;
public PacientaiController(IEntityRepo<Ent.Pacientas> repo)
{
this.repo = repo;
}
我要解决的问题是如何将“OwinContex”传递给 Repo。
public class PacientasEntityRepo:IEntityRepo<Pacientas>,IDisposable
{
public PacientasEntityRepo(IOwinContext ctx)
{
.........
如果我尝试像这样在Startup.cs 中注册它
Container.RegisterType<IOwinContext>(new InjectionFactory(o => HttpContext.Current.GetOwinContext()));
我得到一个空引用,说HttpContext.Current 是空的
这里的主要思想是将当前经过身份验证的用户传递给存储库,因为存储库托管了用于查询数据库的逻辑,具体取决于用户。 (假设用户是管理员,则返回此数据,如果用户是访客 - 返回此数据)
关键是 - 这是一个自我主机!
【问题讨论】:
-
忽略我的回答,我没有阅读 self-hosted 部分
-
我不能是唯一一个读到这篇文章并认为有异味的人,特别是关于需要访问 OWIN 上下文的 Repo?是的,它可能需要根据当前用户做出一些决定,但肯定会获取该信息并仅公开
IPrincipal或类似于 repo 的内容会更有意义吗? -
是的,它可能会。无论如何它不会影响问题,因为我仍然需要访问 OwinContext 或 RequestContext,取出当前主体,并将其交给 IoC 以注入正在构建的依赖项。不管是 IOwinContext 还是 IPrinciple 还是 IUserRole。它仍然存在于“RequestsContext”中。问题是关于这种或类似情况下的沟通原则。
标签: c# unity-container asp.net-web-api2 owin