Autofa c Регистрация на основе файла конфигурации appsettings - PullRequest
1 голос
/ 26 мая 2020

Есть ли способ зарегистрировать компоненты в Autofa c, если в настройках приложения существует определенная информация о конфигурации?

Например:

Если в файле конфигурации существует раздел HistorianSdk, зарегистрируйте этот слой.

Пример настроек приложения

        protected override void Load(ContainerBuilder builder)
    {
        **// Todo: do this based on config file**
        RegisterHistorianSdkLayer(builder);
    }

        private void RegisterHistorianSdkLayer(ContainerBuilder builder)
    {
        builder.RegisterAssemblyTypes(typeof(TagsReader).GetTypeInfo().Assembly)
            .Where(x => x.Namespace != null && x.Namespace.Contains("Repositories"))
            .AsImplementedInterfaces()
            .InstancePerLifetimeScope();

        builder.Register(c =>
        {
            var config = c.Resolve<IConfiguration>();
            var sdkConfigurations =
                config.GetSection("Plugins:HistorianSdk").Get<IEnumerable<HistorianSdkConfig>>();

            return sdkConfigurations;
        }).SingleInstance();

        builder.RegisterType<DataPointMapper>()
            .AsSelf()
            .SingleInstance();

        builder.RegisterType<Domain.HistorianSdk.Config.ConnectionFactory>()
            .AsSelf()
            .InstancePerDependency();
    }

Если да, как лучше всего это сделать? Заранее спасибо.

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете передать свойства модулю autofa c при его регистрации в startup.cs.

При использовании следующего appsettings.json файла:

{
  "UseSdk": true
}

Вы можете передать такие свойства во время регистрации:


builder.RegisterModule(new Bootstrap
{
   UseHistorianSdk = Configuration.GetValue<bool>("UseSdk");
});
...