我建立一个Web API(库模式)使用Unity作为DI容器。
我的服务消费,它接受登录的用户ID作为参数的存储库。这个用户ID参数应该从HTTP请求的报头中来。
我的仓库:
public class UserRepository : IUserRepository
{
private readonly UserInformationObj _userInformation;
public UserRepository(Guid currentUserId)
{
_userInformation = LoadUserData(currentUserId.ToString());
}
}
统一配置:
container.RegisterType<IUserRepository, UserRepository>(new InjectionConstructor(Guid.Empty));
我将如何得到HTTP头团结的价值?
不知道这是类似https://stackoverflow.com/a/11995346/1169180。我不明白的解决方案。任何人都可以快速引导我到底需要做什么呢?
谢谢。
问题的关键是,你有两个阶段unity-container
,注册和解析。既然你不登记期间知道Guid
的价值,你应该从注册删除InjectionConstructor
。
container.RegisterType<UserRepository>();
在另一方面,你知道该决议在Guid
,它来自请求。这样的想法是解决IUserRepository
并注入Guid
那里。这意味着,每个请求你将解决仓库的一个新实例,并注入Guid
的价值到它...
guid = Guid.Parse(request.Headers["CurrentUserId"])
var rep = _container.Resolve<UserRepository>(new ParameterOverride("currentUserId", guid));