Мы исследуем контейнеры внедрения зависимостей для нашего проекта. Сейчас выбираем между Autofac и Castle Windsor. Есть кое-что, что очень важно для нас: строго тип регистрации для Autofac.
Пример:
public interface ITestAutofac
{
}
public class NotDerivedFrom
{
}
Для Виндзора я могу написать что-то вроде этого -
var cont = new WindsorContainer();
cont.Register(Component
.For<ITestAutofac>().ImplementedBy<NotDerivedFrom>());
И это будет неудачно во время компиляции. Resharper может легко помочь в этом.
Для Autofac я могу написать так -
builder.Register(c => new NotDerivedFrom()).As<ITestAutofac>();
var form = container.Resolve<ICustomForm>();
И он выйдет из строя во время выполнения.
Как я могу зарегистрировать типы в Autofac с проверкой времени компиляции?