Microsoft.Composition. Что делает метод WithDefaultConventions?

Предположим, у меня есть метод GetAssemblies, который возвращает список сборок, и метод GetConventions, который возвращает ConventionBuilder, я мог бы составить свой контейнер следующим образом:

CompositionHost container =
    new ContainerConfiguration()
        .WithAssemblies(
            GetAssemblies(), 
            GetConventions())
        .CreateContainer();

Но я мог бы также написать это так:

CompositionHost container =
    new ContainerConfiguration()
        .WithAssemblies(GetAssemblies())
        .WithDefaultConventions(GetConventions())
    .CreateContainer();

Вопрос: В чем разница, если таковая имеется, между этими двумя способами?

Это слово "по умолчанию" в WithDefaultConventions, которое бросает меня. MSDN не проливает свет на то, что это значит. Если бы метод просто назывался WithConventions, я бы не стал задумываться над этим.


Пример методов ниже.

GetAssemblies:

private static IEnumerable<Assembly> GetAssemblies()
    {
        return new[]
        {
            typeof(FileQueue).Assembly, 
            typeof(LoggerExport).Assembly, 
        };
    }

GetConventions:

private static ConventionBuilder GetConventions()
    {
        var conventionBuilder = new ConventionBuilder();

        conventionBuilder
            .ForType<OmsDbContext>()
            .Export<OmsDbContext>()
            .SelectConstructor(ctorInfos => ctorInfos.First())
            .Shared("Boundary.UnitOfWork");

        return conventionBuilder;
    }

1 ответ

В вашем примере две вещи должны делать то же самое. Но если бы вы вызывали WithAssemblies несколько раз, вы могли бы вызывать WithDefaultConventions() только один раз, чтобы применить эти соглашения к сборкам из всех этих вызовов. В противном случае вам придется каждый раз указывать соглашения в качестве второго параметра метода WithAssemblies() для достижения того же эффекта.

Жаль, что вы не найдете много информации о пакете Microsoft.Composition от самой Microsoft.

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