与IServiceCollection.AddTransient方法相关的问题。
下面两行代码基本上做同样的事情吗?他们不一样吗?使用另一个经文是否有优势?
services.AddTransient<MyService,MyService>();
services.AddTransient<MyService>();
我最初使用第一行设置了代码,一切正常。但后来我正在调查另一个问题,我看到了第二行的例子。所以,我出于好奇而改变了我的代码,一切仍然有用。
好奇。
答案 0 :(得分:6)
来自消息来源:
public static IServiceCollection AddTransient<TService>(this IServiceCollection services) where TService : class
{
if (services == null)
throw new ArgumentNullException(nameof (services));
return services.AddTransient(typeof (TService));
}
call services.AddTransient(typeof(TService))
即:
public static IServiceCollection AddTransient(this IServiceCollection services, Type serviceType)
{
if (services == null)
throw new ArgumentNullException(nameof (services));
if (serviceType == (Type) null)
throw new ArgumentNullException(nameof (serviceType));
return services.AddTransient(serviceType, serviceType);
}
与具有2个参数的方法完全相同的调用:
public static IServiceCollection AddTransient<TService, TImplementation>(this IServiceCollection services) where TService : class where TImplementation : class, TService
{
if (services == null)
throw new ArgumentNullException(nameof (services));
return services.AddTransient(typeof (TService), typeof (TImplementation));
}
因此,当您希望将寄存器实现为self时,这只是一种快捷方式。 通常,您将使用不同类型的服务和实现(接口和实现或抽象类和派生类与实现)。