Что произойдет, если в 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() операции, но, по крайней мере, в случае выше этих конкретных обычных регистраций не будет добавлять один и тот же тип дважды.

И нет, не важно, в каком порядке вы объявляете собрания и соглашения о регистрации. Соглашения о регистрации будут выполняться в том порядке, в котором вы их определяете, так что вы увидите, что в некоторых случаях это отражается в упорядочении зависимостей.

Другие вопросы по тегам