Зарегистрируйте экземпляр типа для ServiceCollection в asp.net ядро

#c# #asp.net-core

#c# #asp.net-ядро

Вопрос:

Я использую Asp.Net Ядро 2.2, и я хочу зарегистрировать экземпляр типа для базового типа.

И в файле запуска я пытаюсь зарегистрировать тип и экземпляр следующим образом:

 foreach (var type in typesFromAssemblies)
        {
            var settings = Activator.CreateInstance(type);

            foreach (var prop in type.GetProperties())
            {
                if (!prop.CanRead || !prop.CanWrite)
                {
                    continue;
                }

                var key = type.Name   "."   prop.Name;

                // load instance from database
                var setting = GetSettingByKey<string>(provider, key, loadSharedValueIfNotFound: true);

                if (setting == null)
                {
                    continue;
                }

                object value = CommonHelper.GetMovCustomTypeConverter(prop.PropertyType)
                    .ConvertFromInvariantString(setting);

                // set property
                prop.SetValue(settings, value, null);
            }

            // how I can set "settings" in services?
            // services.Add(new ServiceDescriptor(settings.GetType(), settings, lifetime));
        }
 

Как я могу установить экземпляр «настройки» для служб?

Комментарии:

1. Ваш код выглядит так, как будто вы хотите решить странную проблему. Я знаю, что мой комментарий бесполезен для поиска решения, но не могли бы вы объяснить, какую проблему вы пытаетесь решить, и почему у вас есть DI config в базе данных?

2. Какую актуальную проблему вы хотите решить? Использование различных типов регистрации и реализации уже доступно, вот как вы можете регистрировать интерфейсы, используя конкретные типы реализации. Вы можете зарегистрировать любой тип, а не только интерфейс. Этот код не объясняет, что вы хотите сделать

3. Что касается слова setting , повторяющегося в коде, то это работа подсистемы конфигурации . Вы можете объединить Configuration и DI с помощью шаблона опций , чтобы зарегистрировать классы конфигурации, которые будут введены при создании типа с помощью DI. Вот почему вы видите эти IOption<TConfig> параметры в различных сервисах.

4. Спасибо за ваш отзыв, у меня есть более тысячи настроек со значением по умолчанию в приложении, и нужный мне пользователь может быть изменен в панели управления. Я сохранил настройки в базе данных, и я хочу загрузить их при запуске, сопоставить с определенным типом и загрузить как DI. @PanagiotisKanavos