C# AddTransient:有区别吗?

C# AddTransient:有区别吗?,c#,dependency-injection,.net-core,C#,Dependency Injection,.net Core,与IServiceCollection.AddTransient方法相关的问题 下面两行代码基本上做了相同的事情吗?它们不同吗?用一首诗和另一首诗有什么好处吗 services.AddTransient<MyService,MyService>(); services.AddTransient<MyService>(); services.AddTransient(); services.AddTransient(); 我最初用第一行设置代码,一切正常。但后来我在调查

与IServiceCollection.AddTransient方法相关的问题

下面两行代码基本上做了相同的事情吗?它们不同吗?用一首诗和另一首诗有什么好处吗

services.AddTransient<MyService,MyService>();
services.AddTransient<MyService>();
services.AddTransient();
services.AddTransient();
我最初用第一行设置代码,一切正常。但后来我在调查另一个问题,我看到了第二行的一个例子。因此,出于好奇,我修改了代码,但一切仍然正常

只是好奇

来源:

public static IServiceCollection AddTransient<TService>(this IServiceCollection services) where TService : class
{
  if (services == null)
    throw new ArgumentNullException(nameof (services));
  return services.AddTransient(typeof (TService));
}
这与具有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));
}
公共静态IServiceCollection AddTransient(此IServiceCollection服务),其中TService:class,其中TImplementation:class,TService
{
if(服务==null)
抛出新的ArgumentNullException(nameof(services));
返回服务.AddTransient(typeof(TService),typeof(TImplementation));
}
所以,当您希望注册实现为self时,这只是一个快捷方式。 通常,您将使用不同类型的服务和实现(接口和实现或抽象类和派生类以及实现)。

来源:

public static IServiceCollection AddTransient<TService>(this IServiceCollection services) where TService : class
{
  if (services == null)
    throw new ArgumentNullException(nameof (services));
  return services.AddTransient(typeof (TService));
}
这与具有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));
}
公共静态IServiceCollection AddTransient(此IServiceCollection服务),其中TService:class,其中TImplementation:class,TService
{
if(服务==null)
抛出新的ArgumentNullException(nameof(services));
返回服务.AddTransient(typeof(TService),typeof(TImplementation));
}
所以,当您希望注册实现为self时,这只是一个快捷方式。
通常,服务和实现将使用不同的类型(接口和实现或抽象类和派生类以及实现)。

是的,它们是相同的。你喜欢什么就用什么(我个人更喜欢第二个)。谢谢。很高兴知道。同意。我也喜欢第二个。有时你想注册一个接口,这就是为什么存在更详细的接口。是的,它们是相同的。你喜欢什么就用什么(我个人更喜欢第二个)。谢谢。很高兴知道。同意。我也更喜欢第二个。有时候你想注册一个接口,这就是为什么存在更详细的接口。