我正在寻找能够满足这种情况的DI框架:
每个Controller都有一个像这样的构造函数
public ThisController( ThatRepository repo)
每个存储库都有一个这样的控制器:
public ThatRepository (DataSource ds)
有一个主DataSource,但永远不会传递给存储库。相反,它需要:
MasterDataSource.WithUser ( httpContext?.User?.Identity?.Name )
是否有任何支持开箱即用的Web框架的DI框架?
答案 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);
}