【问题标题】:Castle Windsor registering types温莎城堡登记类型
【发布时间】:2014-03-15 12:41:07
【问题描述】:

我正在寻找一个我怀疑是一个相当基本的问题的答案。

我现在开始使用 Windsor,并且正在努力弄清楚如何注册接口...

在我的应用程序中,我有一个 IRepository 接口,它在构造函数中传递到我的控制器中。我希望 Windsor 为我解决这些依赖关系,但我正在努力弄清楚如何做到这一点。

所以我的 IRepository 看起来有点像这样:

public interface IRepository : IDisposable
{
    List<string> GetList();
}

这是在两个类中实现的:

public class Repository1 : IRepository
{
    public List<string> GetList(){...}
}

public class Repository2 : IRepository
{
    public List<string> GetList(){...}
}

我的控制器看起来有点像这样:

public class HomeController : Controller
{
    private readonly IRepository _repo;

    public HomeController(IRepository repo)
    {
        _repo = repo;
    }
...

现在我想注册 IRepository 以解析为 Repository1 或 Repository2 实现(最终我希望能够找出其他程序集中可用的存储库并加载可用的)

现在,我已经注册了类并更改了构造函数以获取其中一个类的实例,并且可以正常工作,但是我想针对接口进行操作...这就是我苦苦挣扎的地方。

我还希望它足够通用,如果我有一个 IWhatever 和一个实现它的类,windsor 也可以解决这个问题,而无需注册每一个...

我有这个(有效)

container.Register(Classes.FromAssemblyContaining<Repository1>()
    .BasedOn(typeof(IRepository))
    .WithService.AllInterfaces()
    .LifestyleTransient());

但它唯一的注册 Repository1... 任何帮助表示赞赏,同时我会再次阅读文档并查看它是否会在这个时候下沉!

谢谢

【问题讨论】:

  • Repository1 和 Repository2 是同一个程序集的一部分吗?
  • 目前是的,因为这只是我在搞砸试图弄清楚的东西,将来它们将在单独的程序集中
  • 注册后是否有任何潜在的错误配置组件?换句话说,这个数组是空的吗? IHandler[] handlers = (((IDiagnosticsHost) container.Kernel.GetSubSystem(SubSystemConstants.DiagnosticsKey)).GetDiagnostic&lt;IPotentiallyMisconfiguredComponentsDiagnostic&gt;()).Inspect();(将您的IWindsorContainer 传递为container
  • 嗨,是的,数组是空的,我没有再花时间在这上面,但现在又回来了,希望很快会有解决方案!

标签: c# interface castle-windsor


【解决方案1】:

我认为发生的情况是您同时注册了两个存储库,但由于您的控制器只要求一个存储库,Windsor 默认返回 the first one

您可以做些什么来检查存储库是否是在注册后调用 container.ResolveAll();我认为你会得到两个结果。

要更正此问题,您必须告诉控制器它必须解析存储库列表(即 IRepository[]),或者您必须缩小预期的存储库类型。例如,如果您的控制器是 Controller&lt;T&gt; 而您的存储库是 IRepository,则将根据 T 的类型进行选择。

【讨论】:

    【解决方案2】:

    找到答案: http://mikehadlow.blogspot.co.uk/2010/01/10-advanced-windsor-tricks-2-auto.html?m=1

    这正是我想要的,谢谢大家的帮助!

    【讨论】:

    • 您应该尝试详细说明对您有帮助的内容,以防链接消失。您是否检查了两个存储库是否都已注册?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    相关资源
    最近更新 更多