Вероятно, это неправильно сформулировано, поэтому вот произвольный пример:
Код: Выделить всё
// Example enum
public enum Color
{
Green = 1,
Blue = 2,
Red = 3,
// Over a hundred more options
}
// Example interface for all handlers to implement using a generic parameter
public interface IColorHandler
{
Task GetContent(GeneralParamsObject info);
}
// Or, using a public property
public interface IColorHandler
{
Color HandledColor;
Task GetContent(GeneralParamsObject info);
}
// Example implementation specifically for the color green
public class GreenHandler : IColorHandler
{
public const Color HandledColor = Color.Green;
public Task GetContent(GeneralParamsObject info)
{
// Build content for green
}
}
Код: Выделить всё
public class ColorContentService : IColorContentService
{
private readonly IDictionary _handlers;
public ColorContentService(IDictionary handlers)
{
_handlers = handlers;
}
public async Task GetColorsContent(List colors)
{
var info = BuildInfoObject();
var content = new StringBuilder();
foreach (var color in colors)
{
if (_handler.TryGetValue(color, out var handler))
{
content.AppendLine(await handler.GetContent(info));
}
}
return content.ToString();
}
}
Например, вот что мы сейчас делаем для определенных классов с общим интерфейсом:
Код: Выделить всё
serviceCollection.Scan(scan => scan.FromAssemblies(AppDomain.CurrentDomain.GetAssemblies())
.AddClasses(classes => classes.AssignableTo())
.As()
.WithScopedLifetime());
Итак, есть ли способ сделать то, что я надеюсь? Если у Google есть ответы, я понятия не имею, что искать, чтобы найти это, и чтение документации Microsoft пока ничего не дало.
О, и мы на .NET. 6, поэтому некоторые новые функции в данный момент могут быть нам недоступны.
Я еще ничего не пробовал реализовать – все еще на стадии планирования, но я копался в документации и еще не загорелась лампочка.
Подробнее здесь: https://stackoverflow.com/questions/785 ... sing-depen