#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