城堡温莎控制器工厂和存储库未解决

| 我目前正在测试温莎城堡与Ninject的对决,我真的很喜欢温莎提供的服务,我只是在存储库注入方面遇到问题。 所以,这是设置...我有一个看起来像这样的ControllersInstaller ...
public class ControllersInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(FindControllers().Configure(ConfigureControllers()));
    }

    private BasedOnDescriptor FindControllers()
    {
        return AllTypes.FromThisAssembly()
            .BasedOn<IController>()
            .If(Component.IsInSameNamespaceAs<HomeController>())
            .If(t => t.Name.EndsWith(\"Controller\"));

    }

    private ConfigureDelegate ConfigureControllers()
    {
        return c => c.LifeStyle.Transient;
    }
}
看起来像这样的上下文安装程序...
public class ContextInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(AllTypes.FromThisAssembly()
            .Where(t => t.Name == \"MyContext\"));
    }
}
和一个仓库安装程序看起来像...
public class RepoInstaller : IWindsorInstaller
{

    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(AllTypes.FromThisAssembly()
            .Where(type => type.Name.EndsWith(\"Repo\"))
            .WithService.DefaultInterface()
            .Configure(c => c.LifeStyle.Singleton));
    }
}
然后在Global.asax中,我通过...进行注册
private static void BootstrapContainer()
    {
        var container = new WindsorContainer()  // Create a container to hold the dependencies
            .Install(
            new ContextInstaller(),
            new RepoInstaller(),
             new ControllersInstaller()
            );      // Scan this assembly for all IWindsorInstaller

        var controllerFactory = new WindsorControllerFactory(container.Kernel);     // Create a new instance
        ControllerBuilder.Current.SetControllerFactory(controllerFactory);          // Use my factory instead of default
    }
我的家庭控制器看起来像...
    public class HomeController : Controller
{
    IMyRepo _repo;

    public HomeController(MyRepo repo)
    {
        _repo = repo;
    }
但是无论出于什么原因,我调试东西时都会得到... 此组件的某些依赖项无法静态解析。 MyProject.Controllers.HomeController正在等待以下依赖项:服务:-未注册的MyProject.Models.MyRepo。 而且我不知道为什么!我尝试将回购安装程序安装为单例,然后尝试重新排序注册过程,以便在控制器之前进行回购安装。 当我调试并在Global.asax中访问控制器工厂行时,它表示除HomeController之外的所有内容均已正确解析。 有什么想法吗?     
已邀请:
        如果您注册包含接口的存储库 .WithService.DefaultInterface() 您的依赖关系必须基于接口(也许是IRepo)而不是具体接口。 如果您的依赖关系是基于具体的,那么请删除.WithService.DefaultInterface(),这样就可以解决依赖关系了……但这不是最好的方法:对于存储库,总有基于接口的依赖关系     
        我总是讨厌回答自己的问题,但有时必须完成... 这是我错过的一件小而愚蠢的事情!原来,问题出在我的控制器中。我试图将实际的Repo传递给HomeController()构造函数。 我切换到
public ActionResult HomeController(IRepo repo)
{
     _repo = repo;
}
那就是工作所需要的... Sheesh ...     

要回复问题请先登录注册