Я ищу способ реализовать динамическое создание регистрации моделей на основе набора значений, которые я получаю из базы данных (у меня есть код для этого), а затем регистрирую их в конвейере DI (с чем мне нужна помощь) . Надеюсь, приведенный ниже псевдокод поможет показать то, что я ищу. Каждый экземпляр IIntegration имеет свой собственный набор необходимых настроек, и они могут даже меняться между несколькими экземплярами одной и той же интеграции. Я могу успешно извлечь информацию об интеграции из базы данных и создать новый экземпляр этой интеграции, используя имя службы с ключами, но я не знаю, как внедрить свои настройки перед созданием этого экземпляра.
Я не могу просто включить свой список настроек в вызов метода ExecuteAsync, поскольку они могут потребоваться другим зависимым службам для этой интеграции (MyIntegration1DependentService в данном случае). Любая помощь приветствуется.
Надеюсь, это очень упрощенная версия моего вопроса: я могу создать экземпляр Integration1Settings из IEnumerable. Затем я хотел бы внедрить это в контейнер DI, чтобы при вызове GetRequiredKeyedService экземпляр был доступен для MyIntegration1 и MyIntegration1DependentService
public class MyIntegration {
public string IntegrationName { get; set; } = string.Empty;
public IEnumerable Settings { get; set; } = [];
}
public class MySetting()
{
public string SettingName { get; set; } = string.Empty;
public string SettingType { get; set; } = string.Empty;
public string SettingValue { get; set; } = string.Empty;
}
public class Integration1Settings {
public string Setting1 { get; set; } = string.Empty;
public string Settting2 { get; set; } = string.Empty;
}
public class Integration2Settings {
public string Setting3 { get; set; } = string.Empty;
public string Settting4 { get; set; } = string.Empty;
public string Settting5 { get; set; } = string.Empty;
public string Settting6 { get; set; } = string.Empty;
public string Settting7 { get; set; } = string.Empty;
}
public class MyIntegrationFactory {
private readonly IServiceProvider _serviceProvider;
public MyIntegrationFactory(IServiceProvider serviceProvider) {
_serviceProvider = serviceProvider;
}
public async Task GetIntegrationAsync(Invoice invoice) {
var integrationInstance = await GetIntegrationInstanceAsync(invoice);
// Not instance configured
if(integrationInstance is null) {
return null;
}
// Need to do something here to inject settings collection into pipeline prior to getting service
???
// Generate new instance using the name
var instance = _serviceProvider.GetRequiredKeyedService(integrationInstance.IntegrationName);
return instance;
}
private async Task GetIntegrationInstanceAsync(Invoice invoice) {
// ... Pull from DB
}
}
public interface IIntegration {
Task ExecuteAsync();
}
public class MyIntegration1 : IIntegration {
private readonly Integration1Settings _settings;
public MyIntegration1(Integration1Settings settings) {
_settings = settings;
}
// ... Other Code ...
}
public class MyIntegration1DependentService {
private readonly Integration1Settings _settings;
public MyIntegration1DependentService(Integration1Settings settings) {
_settings = settings;
}
// ... Other Code
}
public class MyIntegration2 : IIntegration {
private readonly Integration2Settings _settings;
public MyIntegration2(Integration2Settings settings) {
_settings = settings;
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... g-instance
C# DI Регистрация динамических настроек перед созданием экземпляра ⇐ C#
Место общения программистов C#
-
Anonymous
1719359053
Anonymous
Я ищу способ реализовать динамическое создание регистрации моделей на основе набора значений, которые я получаю из базы данных (у меня есть код для этого), а затем регистрирую их в конвейере DI (с чем мне нужна помощь) . Надеюсь, приведенный ниже псевдокод поможет показать то, что я ищу. Каждый экземпляр IIntegration имеет свой собственный набор необходимых настроек, и они могут даже меняться между несколькими экземплярами одной и той же интеграции. Я могу успешно извлечь информацию об интеграции из базы данных и создать новый экземпляр этой интеграции, используя имя службы с ключами, но я не знаю, как внедрить свои настройки перед созданием этого экземпляра.
Я не могу просто включить свой список настроек в вызов метода ExecuteAsync, поскольку они могут потребоваться другим зависимым службам для этой интеграции (MyIntegration1DependentService в данном случае). Любая помощь приветствуется.
Надеюсь, это очень упрощенная версия моего вопроса: я могу создать экземпляр Integration1Settings из IEnumerable. Затем я хотел бы внедрить это в контейнер DI, чтобы при вызове GetRequiredKeyedService экземпляр был доступен для MyIntegration1 и MyIntegration1DependentService
public class MyIntegration {
public string IntegrationName { get; set; } = string.Empty;
public IEnumerable Settings { get; set; } = [];
}
public class MySetting()
{
public string SettingName { get; set; } = string.Empty;
public string SettingType { get; set; } = string.Empty;
public string SettingValue { get; set; } = string.Empty;
}
public class Integration1Settings {
public string Setting1 { get; set; } = string.Empty;
public string Settting2 { get; set; } = string.Empty;
}
public class Integration2Settings {
public string Setting3 { get; set; } = string.Empty;
public string Settting4 { get; set; } = string.Empty;
public string Settting5 { get; set; } = string.Empty;
public string Settting6 { get; set; } = string.Empty;
public string Settting7 { get; set; } = string.Empty;
}
public class MyIntegrationFactory {
private readonly IServiceProvider _serviceProvider;
public MyIntegrationFactory(IServiceProvider serviceProvider) {
_serviceProvider = serviceProvider;
}
public async Task GetIntegrationAsync(Invoice invoice) {
var integrationInstance = await GetIntegrationInstanceAsync(invoice);
// Not instance configured
if(integrationInstance is null) {
return null;
}
// Need to do something here to inject settings collection into pipeline prior to getting service
???
// Generate new instance using the name
var instance = _serviceProvider.GetRequiredKeyedService(integrationInstance.IntegrationName);
return instance;
}
private async Task GetIntegrationInstanceAsync(Invoice invoice) {
// ... Pull from DB
}
}
public interface IIntegration {
Task ExecuteAsync();
}
public class MyIntegration1 : IIntegration {
private readonly Integration1Settings _settings;
public MyIntegration1(Integration1Settings settings) {
_settings = settings;
}
// ... Other Code ...
}
public class MyIntegration1DependentService {
private readonly Integration1Settings _settings;
public MyIntegration1DependentService(Integration1Settings settings) {
_settings = settings;
}
// ... Other Code
}
public class MyIntegration2 : IIntegration {
private readonly Integration2Settings _settings;
public MyIntegration2(Integration2Settings settings) {
_settings = settings;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78664553/c-sharp-di-register-dynamic-settings-before-creating-instance[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия