Внедрение зависимостей, ввод с параметрами
Я использую vNext реализацию DI.
Как передать параметры конструктору?
Например, у меня есть класс:
public class RedisCacheProvider : ICacheProvider
{
private readonly string _connectionString;
public RedisCacheProvider(string connectionString)
{
_connectionString = connectionString;
}
//interface methods implementation...
}
И служебный регистр:
services.AddSingleton<ICacheProvider, RedisCacheProvider>();
Как передать параметр конструктору класса RedisCacheProvider?
Например, для Autofac:
builder.RegisterType<RedisCacheProvider>()
.As<ICacheProvider>()
.WithParameter("connectionString", "myPrettyLocalhost:6379");
Ответы
Ответ 1
Вы можете либо предоставить делегата для создания экземпляра вашего провайдера кэша вручную, либо напрямую предоставить экземпляр:
services.AddSingleton<ICacheProvider>(provider => new RedisCacheProvider("myPrettyLocalhost:6379"));
services.AddSingleton<ICacheProvider>(new RedisCacheProvider("myPrettyLocalhost:6379"));
Обратите внимание, что контейнер не будет явно удалять экземпляры, созданные вручную, даже если они реализуют IDisposable. См. Документ ASP.NET Core об утилизации услуг для получения дополнительной информации.