Мы используем SimpleInjector
в качестве инжектора зависимостей, и мы регистрируем все типы интерфейсов, используя итерацию сборки.
public static void RegisterInterfaceTypes(this Container container, Assembly assembly)
{
assembly.GetExportedTypes()
.Select(t => new {
Type = t,
Interface = t.GetInterfaces().FirstOrDefault()
})
.ToList()
.ForEach(t =>
{
container.Register(t.Interface, t.Type, Lifestyle.Transient);
});
}
У нас также есть ленивые классы для регистрации. Мы можем зарегистрировать эти классы, как показано ниже, один за другим. Но мы хотим зарегистрировать все ленивые типы с аналогичной итерацией, используя отражение.
container.Register(() => new Lazy<ICommonBusiness>(container.GetInstance<CommonBusiness>));