手动注册所有类或有一个自动的方法
本文关键字:有一个 方法 注册 | 更新日期: 2023-09-27 17:52:13
我使用的是ASP。asp.net MVC 5。我是AutoFac的新手。我有很多课,每节课我都要做,
builder.RegisterType<AuthenticationService>().As<IAuthenticationService>();
builder.RegisterType<IAuthenticationRepositry>().As<AuthenticationRepositry>();
...............................................................................
...............................................................................
注册每种类型都很耗时,而且很容易忘记。在AutoFac中是否有自动注册组件的方法?
如果您想自动注册所有类型作为它们的接口,您可以使用RegisterAssemblyTypes
:
builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly).AsImplementedInterfaces();
或者AsSelf
,如果你想解决具体的实现。
您的XXXService和XXXRepository类可能会违反SOLID原则(如SRP、OCP和ISP)。尝试将业务逻辑和存储库逻辑隐藏在通用抽象之后,可以在这里和这里学习。这使得向这些类添加横切关注点变得容易,并允许您在一行代码中注册每个组:
builder.RegisterAssemblyTypes(assemblies)
.As(t => t.GetInterfaces()
.Where(a => a.IsClosedTypeOf(typeof(ICommandHandler<>))));
builder.RegisterAssemblyTypes(assemblies)
.As(t => t.GetInterfaces()
.Where(a => a.IsClosedTypeOf(typeof(IQueryHandler<>))));
builder.RegisterAssemblyTypes(assemblies)
.As(t => t.GetInterfaces()
.Where(a => a.IsClosedTypeOf(typeof(IRepository<>))));