如何使用请求信息和依赖注入提供服务

时间:2016-09-15 11:57:24

标签: asp.net-core asp.net-core-mvc

我目前正在研究使用asp netcore 1.0开发应用程序。

指出了不同版本的依赖注入here。对我而言,对我而言,正确的选择似乎是拥有一个范围化的实例。

我要做的是注册一个接口,将呼叫委托给另一个网络API。

接口:

public interface IControlCenterRestClient
{
    List<ControlCenter> GetAll();
}

实现:

public class ControlCenterRestClient : RestClientBase, IControlCenterRestClient
{
    public ControlCenterRestClient(string baseUrl, string user, string password) : base(baseUrl, user, password)
    {
    }

    public List<ControlCenter> GetAll()
    {
        return new List<ControlCenter>();
    }
}

通用基类:

public abstract class RestClientBase
{
    public string BaseUrl { get; }

    public string User { get; }

    public string Password { get; }

    protected RestClientBase(string baseUrl, string user, string password)
    {
        BaseUrl = baseUrl;
        User = user;
        Password = password;
    }
}

我的问题:

现在为了在netcore控制器中提供此服务为IControlCenterRestClient,我需要使用当前请求信息构建对象(登录用户 - >获取用户和密码并委托它构建适当的实例)

由于我还没有在SO上找到类似的问题,也没有针对我的特定案例的任何文档,我认为我会为googlers分享解决方案(我在输入这个问题时想出来)。

1 个答案:

答案 0 :(得分:0)

这是您提供需要基于HttpContext的信息的服务的方法:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<IControlCenterRestClient>(ControlCenterFactory);
    }

    private static IControlCenterRestClient ControlCenterFactory(IServiceProvider serviceProvider)
    {
        var http = serviceProvider.GetService<IHttpContextAccessor>();
        // todo: use data obtained from http.HttpContext.User
        return new ControlCenterData();
    }