WebAPI DI框架,了解HttpContext.User

时间:2016-05-25 05:33:26

标签: c# asp.net-web-api dependency-injection httpcontext

我正在寻找能够满足这种情况的DI框架:

每个Controller都有一个像这样的构造函数

public ThisController( ThatRepository repo)

每个存储库都有一个这样的控制器:

public ThatRepository (DataSource ds)

有一个主DataSource,但永远不会传递给存储库。相反,它需要:

MasterDataSource.WithUser ( httpContext?.User?.Identity?.Name )

是否有任何支持开箱即用的Web框架的DI框架?

2 个答案:

答案 0 :(得分:0)

我相信您可以将几乎所有DI容器用于此目的,方法是在容器内注册当前HttpContext(甚至当前用户Identity),然后注入它以构建您的{{ 1}}实例。

这是一个在SimpleInjector中使用DataSource的简单解决方案(您可以轻松地将代码移植到您喜欢的任何DI框架):

HttpContext

答案 1 :(得分:0)

摘要您控制的界面后面的HttpContext,让您选择的DI容器在需要时解决。

public interface ICurrentUser {
    string Name{get;}
}

该界面的具体实现可能看起来像......

public class UserProvider : ICurrentUser {
    HttoContextBase httpContext;
    UserProvider(){
        httpContext = HttpContext.Current;
    }
    public string Name { 
        get{ return httpContext?.User?.Identity?.Name ?? string.Empty; } 
    }
}

您在DI容器中注册了您的界面/合约,并在DataSource需要时解决。

public void SomeSetupMethod(ICurrentUser user) {
    MasterDataSource.WithUser(user?.Name);
}