【问题标题】:Setting repositories and providers设置存储库和提供程序
【发布时间】:2011-10-11 11:43:49
【问题描述】:

我在尝试弄清楚如何执行以下操作时遇到了一点问题。如果以下内容看起来很愚蠢,我很抱歉,只是 Castle.Windsor 的新手。

对,在我的应用程序存储库中应该指向不同的数据库。它们都共享一个抽象类(Db 方法抽象),但它们之间没有关联。 所以我有这样的事情:

public class UserService : IUserService
{
   private readonly IUserRepository _repository;
   public UserService(IUserRepository repository) { _repository = repository; }
   ...
}

public class UserRepository : Mongo, IUserRepository
{
  public UserRepository(DatabaseHosts.Users UsersHost) : base(UsersHost) { }
  ...
}

所有配置设置都是强类型的,到目前为止,我正在调用设置服务的安装程序,然后再调用其余部分的安装。

我的问题是:我必须注册服务和存储库还是缺少一些东西?

我认为,我们可以允许从服务访问 DbHost 属性,但我不喜欢。 我们还有可能需要某种初始化的外部系统的提供程序。

到目前为止,我有这样的事情:

public class ServicesInstaller : IWindsorInstaller
{
   public void Install(IWindsorContainer container, IConfigurationStore store)
   {
       container.Register(Component.For<IUserService>()
                .ImplementedBy<IUserService>()
                .LifeStyle.Singleton);
   }
}

【问题讨论】:

    标签: domain-driven-design castle-windsor


    【解决方案1】:
       public void Install(IWindsorContainer container, IConfigurationStore store)
       {
           container.Register(Component.For<IUserService>()
                    .ImplementedBy<UserService>()
                    .LifeStyle.Singleton);
       }
    

    您必须将具体服务“UserService”注册到接口,以允许容器确定要解析的具体服务。

    【讨论】:

    • 这就是我到目前为止所拥有的,问题是我是在安装程序中注册我的存储库还是将 DbHost 属性从服务传递到存储库。请记住,我不使用 Context 或 UnitOfWork 或类似的。所以本质上我需要用正确的字符串初始化存储库。
    • 最好注册它并使用 DI 使其可测试,而不是从服务传递具体上下文。
    猜你喜欢
    • 2023-03-03
    • 2011-09-04
    • 2011-10-12
    • 1970-01-01
    • 2018-10-11
    • 2011-03-28
    • 2018-09-07
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多