簡體   English   中英

MVC3 Controller構造函數+ Ninject

[英]MVC3 Controller constructor + Ninject

我正在研究MVC3 Web應用程序,並與Ninject發生了新的問題。

我在我的控制器中使用以下代碼:

public class TestController : Controller
{       
    public IRepository<CustomerModel> rep;

    public TestController(IRepository<CustomerModel> repository)
    {
        this.rep = repository;
    }

    public ActionResult Index()
    {
        return View();
    }
}

和我的Ninject模塊:

public class RepositoryModule : NinjectModule
{
    public override void Load()
    {
        Bind(typeof(IRepository<>)).To(typeof(Repository<>));
    }
}

但是這只會引發“System.MissingMethodException:沒有為此對象定義的無參數構造函數”。 當我嘗試渲染索引視圖時。

如果我然后添加:

public TestController() : this(new Repository<CustomerModel>(new XenCRMEntities())) { }

所以我的實際TestController看起來像:

public class TestController : Controller
{       
    public IRepository<CustomerModel> rep;

    public TestController() : this(new Repository<CustomerModel>(new XenCRMEntities())) { }

    public TestController(IRepository<CustomerModel> repository)
    {
        this.rep = repository;
    }

    public ActionResult Index()
    {
        return View();
    }
}

它可以工作,但正如你所看到的那樣,新的構造函數幾乎打破了IoC的全部要點。

我該如何解決?

提前致謝。

一個簡短的測試表明,MVC3擴展中的泛型綁定沒有問題。 我猜這個問題不在Controller中,但是由於它有一些未知的依賴項,因此無法創建Repository。

但是這使我每次更改依賴項解析器以顯示Ninject堆棧跟蹤,只要可以解析所請求的類型,但其依賴關系之一無法解析。 更新到構建服務器上的最新版本以獲得更好的堆棧跟蹤。

您將需要更改控制器工廠,因為常規MVC控制器工廠不執行DI。

您可以在這里查看有關如何設置MVC + Ninject的更多信息: MVC3 + Ninject - 如何?

事實證明,它不是控制器搞砸了,但Ninject沒有正確綁定我的通用存儲庫和IRepository - 因此我創建了一個新帖子: Ninject + Bind通用存儲庫

不要使用這個綁定!

綁定(typeof運算(IRepository <>))向(typeof運算(存儲庫<>))。

我改變了我的代碼使用這個綁定和服務器崩潰,它適用於一個用戶,但對於數千個請求它真的很糟糕

采用

Bind(typeof(IRepository<IClass>)).To(typeof(Repository<Class>))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM