IRepository与ISession

时间:2012-04-18 09:59:32

标签: .net asp.net-mvc repository castle-windsor

我有一些存储库。通过界面IRepository实现与它们的合作。
在使用ISession实现的sample project HomeController构造函数中。当我写这篇文章时:

public class TestingController : Controller
{
    private ISession session;

    public TestingController(ISession session)
    {
        this.session = session;
    }
//Some code here with this.session
}

运作良好。当我决定使用IRepository时:

public class TestingController : Controller
{
    private IRepository repository;

    public TestingController(IRepository repository)
    {
        this.repository = repository;
    }
//Some code here with this.repository
}

它在其他类WindsorControllerFactory的此方法中不起作用:

protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
        {
            throw new HttpException(404, string.Format("The controller for path {0} culd not found!", requestContext.HttpContext.Request.Path));
        }

        return (IController)this.kernel.Resolve(controllerType);
    }

我有例外

  

无法创建组件'MvcApplication1.Controllers.ResultsController',因为它具有要满足的依赖性。

     

'MvcApplication1.Controllers.ResultsController'正在等待   以下依赖项:    - 没有注册的服务'dal.Repository.IRepository'。

如何解决?

P.S。大会dal.Repository正在运作。如果我在任何地方写new dal.Repository.Repository()而不是this.repository - 它就可以了。

2 个答案:

答案 0 :(得分:3)

看起来你错过了IRepository的绑定。

您必须具有实现IRepository接口的具体类,比如说MyRepository。然后你应该配置Windsor,以了解IRepository的内容。

类似的东西,

container.Register(Component.For<IRepository>().ImplementedBy<MyRepository>());

答案 1 :(得分:0)

我可以按照Documentation

解决同样的问题

另一件事是,如果我们从github下载此项目的新版本,我们将看不到此expcetion Link