假设我有一个方法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;
}
答案 0 :(得分:0)
在你的例子中,这两件事情应该是一样的。但是,如果您多次调用WithAssemblies,则只能调用WithDefaultConventions()一次,以将这些约定应用于所有这些调用的程序集。否则,您必须每次都提供约定作为WithAssemblies()方法的第二个参数来实现相同的效果。
太糟糕了,你在微软自己的Microsoft.Composition包中找不到太多信息。