统一构造器注入的运行参数

问题描述 投票:1回答:1

我建立一个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。我不明白的解决方案。任何人都可以快速引导我到底需要做什么呢?

谢谢。

c# dependency-injection unity-container
1个回答
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));
© www.soinside.com 2019 - 2024. All rights reserved.