假设我有一个返回程序集列表的方法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;
}
在您的示例中,这两件事应该做相同的事情。但是,如果多次调用WithAssemblys,则可以只调用WithDefaultConventions()一次,以便将这些约定应用于所有这些调用中的程序集。否则,您将不得不每次将约定作为WithAssemblies()方法的第二个参数来提供,以获得相同的效果。
遗憾的是,你找不到太多关于微软的信息。