Есть ли разница междуметодология регистрации Autofac и различия
builder.RegisterModule(new XYZModule());
и
builder.RegisterModule<XYZDataModule>();
???
Есть ли разница междуметодология регистрации Autofac и различия
builder.RegisterModule(new XYZModule());
и
builder.RegisterModule<XYZDataModule>();
???
Там нет никакой разницы: внутренне builder.RegisterModule<XYZDataModule>();
реализуются следующим образом:
public static void RegisterModule<TModule>(this ContainerBuilder builder)
where TModule : IModule, new()
{
Autofac.RegistrationExtensions.RegisterModule(builder, (IModule) new TModule());
}
поэтому общий метод вызова нон дженерика.
Предоставление двух методов для одной и той же вещи в основном для удобства и предпочтений, но это общая практика в .net, чтобы предоставить не общую версию общих методов.
И обычно есть небольшая разница в использовании:
Если вы знаете время типа компиляции модуля и ваш модуль действительно есть Defualt застройщик использовать общий метод (который является менее персонажу типа):
builder.RegisterModule<XYZModule>();
или если вы не знаете типа типа осложнений модуля или ваш модуль не имеет конструктора по умолчанию, то используйте другую перегрузку:
builder.RegisterModule(new XYZModule());
Итак, в качестве общего руководства: используйте общую версию, если вы знаете тип и используете не общую версию, если вы не знаете тип во время компиляции (конечно, вы можете создавать общие методы/классы также во время запуска, время с отражением, но это совсем другая история).