c# - Unity 构造函数注入作为运行时参数
问题描述
我正在使用 Unity 作为 DI 容器构建 Web API(存储库模式)。
我的服务正在使用一个接受登录用户 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 Header 中获取值?
不确定这是否相似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));
推荐阅读
- java - 在java中将Arrow转换为Parquet,反之亦然
- wordpress - ACF Blocks 数据如何存储在数据库中
- omnet++ - 发送“信标你好”
- mongodb - 如何创建两个集合之间的关系
- c# - 在 HackerEarth 上使用 C# 时出现内存错误 NZEC
- git - 如何在命令行中将项目分配给 GHI 或 Hub (Github) 问题?
- reactjs - 当我们在antd表中使用rowSelection在父行上选择时选择子行
- c# - 如何保存随机变量字符串?
- angular - Jasmine - “无法读取未定义抛出的属性‘值’”
- javascript - 无法在春季项目上显示 Summernote 文本区域