1

私はいくつかのリポジトリを持っています。それらとの連携は、インターフェースを通じて実現されますIRepository
ISessionで実現されたサンプル プロジェクト 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'。

それを解決する方法は?

PS アセンブリdal.Repositoryは機能しています。new dal.Repository.Repository()代わりにどこにでも書くと、this.repositoryそれは機能します。

4

2 に答える 2

3

のバインディングが欠落しているようですIRepository

IRepositoryインターフェイスを実装する具体的なクラスが必要MyRepositoryです。次に、Windsor を構成して、 が何であるかを理解する必要がありますIRepository

何かのようなもの、

container.Register(Component.For<IRepository>().ImplementedBy<MyRepository>());
于 2012-04-18T10:02:52.810 に答える