Microsoft.Composition.WithDefaultConventions方法的作用

本文关键字:作用 方法 WithDefaultConventions Composition Microsoft | 更新日期: 2023-09-27 18:21:59

假设我有一个返回程序集列表的方法GetAssemblys和一个返回ConventionBuilder的名为GetConventions的方法,我可能会像这样组成我的容器:

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

但我也可以这样写:

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

问题:这两种方法之间有什么区别(如果有的话)?

正是WithDefaultConventions中的"默认"一词让我大吃一惊。MSDN并没有详细说明这意味着什么。如果这个方法被简单地称为WithConventions,我就不会再考虑它了。


下面的示例方法。

GetAssemblys:

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;
    }

Microsoft.Composition.WithDefaultConventions方法的作用

在您的示例中,这两件事应该做相同的事情。但是,如果多次调用WithAssemblys,则可以只调用WithDefaultConventions()一次,以便将这些约定应用于所有这些调用中的程序集。否则,您将不得不每次将约定作为WithAssemblies()方法的第二个参数来提供,以获得相同的效果。

遗憾的是,你找不到太多关于微软的信息。