其他依赖注入容器
- Microsoft.Extensions.DependencyInjection是一个简单的DI容器, ASP.NET Core就使用它
- 许多第三方的容器,提供额外功能
- Microsoft.Extensions.DependencyInjection,还可以使用适配器来配置它。比如Autofac这个第三方DI容器,以NuGet包Autofac.Extensions.DependencyInjection的形式添加一个适配器
- 还有很多第三方DI容器:Rezolver, Scan, Neleus, CuteAnt, fm, Dryloc, Stashbox
class Program
{
static void Main()
{
using (IContainer container = RegisterServices())
{
var controller = container.Resolve<HomeController>();
string result = controller.Hello("Katharina");
Console.WriteLine(result);
}
}
static IContainer RegisterServices()
{
var services = new ServiceCollection();
services.AddSingleton<IGreetingService, GreetingService>();
services.AddTransient<HomeController>();
var builder = new ContainerBuilder();
builder.Populate(services);
return builder.Build();
}
}
public class HomeController
{
private readonly IGreetingService _greetingService;
public HomeController(IGreetingService greetingService)
{
_greetingService = greetingService ?? throw new ArgumentNullException(nameof(greetingService));
}
public string Hello(string name) =>
_greetingService.Greet(name);
}
public class GreetingService : IGreetingService
{
public string Greet(string name) => $"Hello, {name}";
}
public interface IGreetingService
{
string Greet(string name);
}