Что произойдет, если в RegistryMap Registry есть дубликаты сканирования?
Я пытаюсь разобраться с утечкой памяти в своем веб-приложении MVC, и я заметил одну вещь: моя DefaultRegistry for StructureMap дублировала сканирование...scan.TheCallingAssembly():
public DefaultRegistry()
{
Scan(
scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.TheCallingAssembly();
});
}
Может ли это вызвать проблемы? Может ли это вызвать утечку памяти? (Пожалуйста, будьте проблемой). Сегодня вечером я опубликую исправление, так что в конце концов я выясню, решит ли это проблему или нет; но было бы неплохо знать наверняка, имеют ли побочные методы сканирования какие-либо побочные эффекты.
Кроме того, имеет ли значение порядок, в котором появляются методы сканирования? Должен ли scan.WithDefaultConventions() быть последним или первым, или это имеет значение?
1 ответ
Вот соответствующий код в StructureMap: https://github.com/structuremap/structuremap/blob/master/src/StructureMap/Graph/AssemblyScanner.cs#L29-L30.
Поэтому нет, StructureMap не будет дважды сканировать одну и ту же сборку при любом вызове Scan()
, Вы могли бы потенциально создать дублирование, если вы делаете одну и ту же логическую вещь в нескольких Scan()
операции, но, по крайней мере, в случае выше этих конкретных обычных регистраций не будет добавлять один и тот же тип дважды.
И нет, не важно, в каком порядке вы объявляете собрания и соглашения о регистрации. Соглашения о регистрации будут выполняться в том порядке, в котором вы их определяете, так что вы увидите, что в некоторых случаях это отражается в упорядочении зависимостей.