使用
原生DI扩展 :
NuGet : Antelcat.DependencyInjection.Autowired
ASP.NET Core Mvc扩展 :
NuGet : Antelcat.AspNetCore.DependencyInjection.Autowired
Github : 仓库地址
README.md
Antelcat.DependencyInjection.Autowired
原生 .NET dependency injection 使用 Autowired 的扩展,提供属性和字段注入。
提供全部生命周期包括泛型的解析. 且使用 ILGeneratorEx 加速注入性能。
用法
public class Service{
[Autowired]
private readonly IService dependency;
[Autowired]
private IService Dependency { get; set; }
}
一般情况下 :
IServiceProvider provider = new ServiceCollection()
.Add(...)
.BuildAutowiredServiceProvider(static x=>x.BuildServiceProvider());
IService service = provider.GetService<IService>();
在 ASP.NET CORE MVC 中:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers() //register controllers
.AddControllersAsServices() // add controllers as services
.UseAutowiredControllers(); // use auto wired controllers
builder.Host.UseAutowiredServiceProviderFactory(); // autowired services
单元测试可以在 ServiceTest.cs , 中找到,这表现出高于Autofac并且接近原生的性能。
迁移
与此同时, 你也可以继续沿用先前的特性, 只需要在build的时候提供他们即可 :
IServiceProvider provider = collection.BuildAutowiredServiceProvider<YourAutowiredAttribute>(...);
builder.Services.AddControllers()
.AddControllersAsServices()
.UseAutowiredControllers<YourAutowiredAttribute>();
builder.Host.UseAutowiredServiceProviderFactory<YourAutowiredAttribute>();