Подтвердить что ты не робот

Внедрение зависимостей, ввод с параметрами

Я использую 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");
4b9b3361

Ответ 1

Вы можете либо предоставить делегата для создания экземпляра вашего провайдера кэша вручную, либо напрямую предоставить экземпляр:

services.AddSingleton<ICacheProvider>(provider => new RedisCacheProvider("myPrettyLocalhost:6379"));

services.AddSingleton<ICacheProvider>(new RedisCacheProvider("myPrettyLocalhost:6379"));

Обратите внимание, что контейнер не будет явно удалять экземпляры, созданные вручную, даже если они реализуют IDisposable. См. Документ ASP.NET Core об утилизации услуг для получения дополнительной информации.