繁体   English   中英

Unity构造函数注入作为运行时参数

[英]Unity constructor injection as a runtime parameter

我正在使用Unity作为DI容器构建Web API(存储库模式)。

我的服务正在使用一个接受登录用户ID作为参数的存储库。 此用户ID参数应来自http请求的标头。

我的资料库:

public class UserRepository : IUserRepository
{
    private readonly UserInformationObj _userInformation;

    public UserRepository(Guid currentUserId)
    {       
        _userInformation = LoadUserData(currentUserId.ToString());
    }
}

Unity配置:

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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM