我目前正在研究使用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分享解决方案(我在输入这个问题时想出来)。
答案 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();
}