回答

2

沒有區別:國內的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()); 

所以作爲一般指導原則:如果知道類型,則使用通用版本,如果在編譯時不知道類型,則使用非通用版本(當然,您也可以在運行時創建通用方法/類)時間與反思,但這是一個不同的故事)。