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.