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

时间:2019-02-06 21:15:12

标签: c# dependency-injection unity-container

我正在使用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标头中统一获取值?

不确定是否类似于https://stackoverflow.com/a/11995346/1169180。我不明白解决方案。谁能迅速指导我到底需要做什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

重点是您有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));