Unity中具有优先级/回退和泛型的依赖注入
本文关键字:泛型 依赖 注入 回退 优先级 Unity | 更新日期: 2023-09-27 18:15:11
假设我有一个泛型接口和实现它的泛型类。
interface IRepository<TModel> { }
[RegisterGeneric(typeof(IRepository<>))]
class GenericRepository<TModel> : IRepository<TModel> { }
和User
和Order
两种模型。User
没有什么特别的,所以它使用通用的存储库实现。Order
是不同的,所以我有一个特定的存储库。
[Register(typeof(IRepository<Order>))]
class OrderRepository : GenericRepository<Order> { }
同时你可以看到我使用两个属性,这样我就可以扫描属性并在应用程序启动时自动将它们注册到Unity。我想要的是:
-
IRepository<User>
映射到GenericRepository<User>
-
IRepository<Order>
映射到OrderRepository
在Unity中,当你进行多个注册时,Unity将为你建立一个注册集合,其中最后一个注册成为"默认"注册。因此,在这方面,您应该能够执行以下操作:
container.RegisterType(typeof(IRepository<>), typeof(GenericRepository<>));
// Override multiple specific implementations (I image batch registration here)
container.RegisterType(typeof(IRepository<Order>), typeof(OrderRepository));
container.RegisterType(typeof(IRepository<Customer>), typeof(CustomerRepository));