有时候可能并不需要使用像Autofac这样功能这么多的DI框架,可以考虑使用Sructor,很贴近原生DI框架,十分轻量。
举例:
注册所有继承自ITransient,ISingleton,IScoped接口的类。同时按照接口注册和注册自身,或者按照类名称去筛选注册。
services.Scan(scan =>
{
//当前程序集
scan.FromAssemblyOf<Startup>()
//筛选Class,任意条件
.AddClasses(classes => classes.Where(e => e.Name.EndsWith("Service")))
//按照接口去进行注册
.AsImplementedInterfaces()
//注册自身
.AsSelf()
//.AsMatchingInterface()
//注册的生命周期类型
.WithScopedLifetime()
.AddClasses(classes => classes.AssignableTo(typeof(ITranscient)))
.AsImplementedInterfaces()
.AsSelf()
.WithTransientLifetime()
.AddClasses(classes => classes.AssignableTo(typeof(IScope)))
.AsImplementedInterfaces()
.AsSelf()
.WithScopedLifetime()
.AddClasses(classes => classes.AssignableTo(typeof(ISingleton)))
.AsImplementedInterfaces()
.AsSelf()
.WithSingletonLifetime();
});