inversion-of-control – 根据构造函数参数属性使用autofac解析
发布时间:2020-12-14 00:50:32 所属栏目:百科 来源:网络整理
导读:我正在使用Autofac.我想基于我应用于构造函数参数的属性注入不同的依赖实现.例如: class CustomerRepository{ public CustomerRepository([CustomerDB] IObjectContainer db) { ... }}class FooRepository{ public FooRepository([FooDB] IObjectContainer
我正在使用Autofac.我想基于我应用于构造函数参数的属性注入不同的依赖实现.例如:
class CustomerRepository { public CustomerRepository([CustomerDB] IObjectContainer db) { ... } } class FooRepository { public FooRepository([FooDB] IObjectContainer db) { ... } } builder.Register(c => /* return different instance based on attribute on the parameter */) .As<IObjectContainer>(); 属性将提供数据,例如连接字符串,我可以使用它来实例化正确的对象. 我怎样才能做到这一点?
听起来您想要向CustomerRepository和FooRepository提供不同的IObjectContainer实现.如果是这种情况,属性可能是
thin metal ruler.相反,我将向您展示如何使用Autofac实现多个实现.
(为简洁起见,省略了.ContainerScoped()之类的调用.) 首先,通过命名注册为每个连接字符串注册一个版本的IObjectContainer: builder .Register(c => new ObjectContainer(ConnectionStrings.CustomerDB)) .As<IObjectContainer>() .Named("CustomerObjectContainer"); builder .Register(c => new ObjectContainer(ConnectionStrings.FooDB)) .As<IObjectContainer>() .Named("FooObjectContainer"); 然后,解析存储库注册中的特定实例: builder.Register(c => new CustomerRepository( c.Resolve<IObjectContainer>("CustomerObjectContainer")); builder.Register(c => new FooRepository( c.Resolve<IObjectContainer>("FooObjectContainer")); 这使得存储库没有配置信息: class CustomerRepository { public CustomerRepository(IObjectContainer db) { ... } } class FooRepository { public FooRepository(IObjectContainer db) { ... } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |