Как зарегистрировать этот класс с помощью autofac? - PullRequest
0 голосов
/ 29 июня 2019

У меня есть этот класс, где в настоящее время я зарегистрировал их, используя AddScoped из метода сервиса. Но как мне их зарегистрировать, используя автофак? Я пытаюсь привыкнуть к автофаку.

Уже пытался использовать Autofac для регистрации, но при запуске программы он ничего не делает.

Класс

public class WaktuSolatServiceApi  : IWaktuSolatServiceApi
{
    private readonly string URL = string.Empty;

    HttpClient client;

    public WaktuSolatServiceApi(HttpClient client, IOptions<WaktuUrl> 
 settings)
    {
        this.client = client;
        URL = settings.Value.URL;
    }
}

public interface IWaktuSolatServiceApi
{
    Task<Solat> GetAsyncSet();
}

Autofac

public static class ContainerConfig
{
    public static IContainer Configure()
    {
        var builder = new ContainerBuilder();

        builder.RegisterAssemblyTypes(Assembly.Load(nameof(WaktuSolatApi)))
            .Where(c => c.Namespace.Contains("Services"))
            .As(t => t.GetInterfaces().FirstOrDefault(i => i.Name == "I" + t.Name)).AsImplementedInterfaces();

        //builder.Register(c => new WaktuSolatServiceApi(c.Resolve<HttpClient>(), c.Resolve<IOptions<WaktuUrl>>()));

        return builder.Build();
    }
}

Запуск:

public Startup(IConfiguration configuration)
{
        Configuration = configuration;
        var container = ContainerConfig.Configure();
}

В настоящее время я использую это:

public static IServiceCollection AddService(this IServiceCollection 
services)
{
        services.AddScoped<IWaktuSolatServiceApi, WaktuSolatServiceApi>();
        services.AddScoped<HttpClient>();

        return services;
 }

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Autofac предоставляет три типичных способа идентификации услуг.Наиболее распространенным является определение по типу.

builder.RegisterType<WaktuSolatServiceApi>().As<IWaktuSolatServiceApi>();

В этом примере связывается типизированная служба IWaktuSolatServiceApi с компонентом WaktuSolatServiceApi.Экземпляры компонента могут быть получены с использованием типа службы с помощью метода Resolve ():

var r = container.Resolve<IWaktuSolatServiceApi>();

и, наконец, если это не ваш ответ, посмотрите на этот Autofac Document для получения дополнительной информации

0 голосов
/ 29 июня 2019

Вам следует настроить параметры.

services.Configure<MyOptions>(Configuration.GetSection("MyOptions"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...