Обычная регистрация услуги будет заменена регистрацией с ключом. Было ли это сделано намеренно?C#

Место общения программистов C#
Anonymous
Обычная регистрация услуги будет заменена регистрацией с ключом. Было ли это сделано намеренно?

Сообщение Anonymous »

У меня есть приложение .NET 8.0 + Autofac 8.4.0, без мультиарендности — просто обычный веб-API ASP.NET Core.
У меня есть две регистрации таких служб:

Код: Выделить всё

builder.RegisterType().As();
builder.RegisterType().Keyed("buzzinga!");
Итак, основная идея заключалась в использовании как общей регистрации, так и регистрации по ключу.
Тогда где-то в моем приложении есть следующий код:

Код: Выделить всё

using (var myScope = _container.BeginLifetimeScope())
{
var service = myScope.Resolve
}
И в этом случае я ожидаю, что SomeService будет разрешен. Но вместо этого был разрешен SomeAlternativeService.
Раньше никаких назначений/разрешений ключей не было.
Кстати, если я использую PreserveExistingDefaults() для вторых регистраций - никакого эффекта (что на самом деле нормально, потому что обе регистрации не имеют одинакового уровня).
Как я это решил: вторая регистрация идет первой.
В этом случае в регистрация области без ключа будет корректно разрешена путем обычного вызова метода Resolve. И в случае, если мне нужна регистрация с ключом - я могу использовать ResolveKeyed, который тоже будет работать правильно.
Мой вопрос: правильно ли это поведение, когда две разные регистрации (с ключом и без ключа) могут переопределять друг друга в случае, если регистрации с ключом идут после обычной регистрации без ключа?
Может быть, я что-то неправильно понял, но регистрации с ключом и без ключа должны быть разделены и не должны влияют друг на друга.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -was-it-by

Вернуться в «C#»