【发布时间】: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<IPotentiallyMisconfiguredComponentsDiagnostic>()).Inspect();(将您的IWindsorContainer传递为container) -
嗨,是的,数组是空的,我没有再花时间在这上面,但现在又回来了,希望很快会有解决方案!
标签: c# interface castle-windsor