具有某些参数的通用接口的依赖注入
Dependency injection for generic interface with some parameters
我想在注入泛型类型时提供参数。这可能吗?
我的泛型类型定义:
public interface IApiClient<T> where T : class
{
}
public class ApiClient<T> : IApiClient<T> where T : class
{
public ApiClient(string baseAddress = "", string endpoint = "")
{
//some codes
}
}
我的实现是:
services.AddSingleton(typeof(IApiClient<>), typeof(ApiClient<>));
如何在这个用法中给出 baseAddress
和 endpoint
?
谢谢。
您可以为构造函数参数单独设置 class。
例如基于您的代码:
public class ApiClientSettings
{
public string BaseAddress { get; set; }
public string Endpoint { get; set; }
}
创建 ApiClientSettings
的实例(或者您甚至可以简单地从 appsettings.json
文件中获取值)。然后在容器中注册ApiClientSettings
。
var apiClientSettings = new ApiClientSettings
{
BaseAddress = "address",
Endpoint = "endpoint"
};
services.AddSingleton(apiClientSettings);
将设置 class 注入到您的 ApiClient
public class ApiClient<T> : IApiClient<T> where T : class
{
public ApiClient(ApiClientSettings settings)
{
//some codes
}
}
我想在注入泛型类型时提供参数。这可能吗?
我的泛型类型定义:
public interface IApiClient<T> where T : class
{
}
public class ApiClient<T> : IApiClient<T> where T : class
{
public ApiClient(string baseAddress = "", string endpoint = "")
{
//some codes
}
}
我的实现是:
services.AddSingleton(typeof(IApiClient<>), typeof(ApiClient<>));
如何在这个用法中给出 baseAddress
和 endpoint
?
谢谢。
您可以为构造函数参数单独设置 class。
例如基于您的代码:
public class ApiClientSettings
{
public string BaseAddress { get; set; }
public string Endpoint { get; set; }
}
创建 ApiClientSettings
的实例(或者您甚至可以简单地从 appsettings.json
文件中获取值)。然后在容器中注册ApiClientSettings
。
var apiClientSettings = new ApiClientSettings
{
BaseAddress = "address",
Endpoint = "endpoint"
};
services.AddSingleton(apiClientSettings);
将设置 class 注入到您的 ApiClient
public class ApiClient<T> : IApiClient<T> where T : class
{
public ApiClient(ApiClientSettings settings)
{
//some codes
}
}