【问题标题】:Using same parameter value in a dependency with Windsor在 Windsor 的依赖项中使用相同的参数值
【发布时间】:2015-06-24 12:34:26
【问题描述】:

甚至不确定这是否可以完成,可能需要重新考虑整个事情,但我想在这样做之前我会问。

好的,我有一个带有以下构造函数的存储库类

    public Repository(ISessionManager sessionManager, string dbName)
    {
        this.sessionManager = sessionManager;
        this.dbName = dbName;
    }

目前在应用程序中任何需要使用存储库的地方,它都会使用依赖注入,并且存储库会像这样在容器中注册。

Component.For<IRepository<User, int>>().ImplementedBy<Repository<User, int>>()
                     .DependsOn(Dependency.OnValue("dbName", "admin")),

我要做的是将数据库名称的设置提升到将使用存储库的服务的级别。

例如有一个带有构造函数的服务

public SecurityService(ITransactionFactory transactionFactory,
                       IRepository<User, int> userRepository,
                       string dbName)

我希望在容器中针对 ServiceService 注册参数 dbName,并在注入参数 userRepository 时传递该值。

因此,如果另一个服务需要使用具有不同数据库的相同存储库,则在注册时会提供一个新名称。

这可能吗?

【问题讨论】:

  • This is a possible solution。否则,您可以为IRepository 创建一个factory,它将dbName 作为参数并将其注入SecurityService,然后使用它手动创建存储库。

标签: c# castle-windsor


【解决方案1】:

据我所知,不可能完全按照您的要求进行操作,但使用命名注册可能会让您以一种更温莎(“正确”)的方式达到相同的最终目标。

例如,以下两个注册可以同时存在:

Component.For<IRepository<User, int>>()
         .ImplementedBy<Repository<User, int>>()
         .DependsOn(Dependency.OnValue("dbName", "admin")
         .Named("adminRepositoryRegistration")

Component.For<IRepository<User, int>>()
         .ImplementedBy<Repository<User, int>>()
         .DependsOn(Dependency.OnValue("dbName", "user")
         .Named("userRepositoryRegistration")

然后您可以连接您的服务以依赖于 Windsor 中的特定注册。例如,这个将绑定到第一个注册:

Component.For<IUserService>()
         .ImplementedBy<UserService>()
         .DependsOn(Dependency.OnComponent("userRepository", "userRepositoryRegistration")

这将绑定到第二个:

Component.For<ISecurityService>()
         .ImplementedBy<SecurityService>()
         .DependsOn(Dependency.OnComponent("adminRepository", "adminRepositoryRegistration")

总的来说,我觉得它提供了一个更简洁的解决方案,因为它处理了 DI 注册中的所有依赖项配置,而不是留下任何松散的结尾来包裹在实际的服务中,并且允许您根据需要路由依赖项。

【讨论】:

  • 。是我最终走的路,似乎是唯一的方法。可能永远不必再这样做了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多