私のコントローラーIUnitOfWork
では、データベース機能のコントローラー アクションで使用されるオブジェクト (IoC から生成される) を渡します (IUnitOfWork
サービス レイヤーに渡されます)。
私のビューの 1 つで、 へのリンクを提供したい/Company/View/<id>
ので、次のように呼び出します。
<li>@Html.ActionLink(company.Name, MVC.Company.View(company.Id))</li>
これはコントローラーからではなくCompany
、別のコントローラーのビューから呼び出されています。問題は、MVC.Company.View(company.Id)
実際にCompanyController.View(id)
メソッド自体を呼び出しているように見えることです。これは2つの理由で悪いです。
1)CompanyController
の非パラメーターのコンストラクターは呼び出されないため、UnitOfWork
存在しないため、View(int id)
アクションが呼び出されると、アクションのデータベース呼び出しはNullReferenceException
.
2)存在する場合でも、リンクが生成されるよう IUnitOfWork
に、ビューがデータベース呼び出しをトリガーするべきではありません。Html.ActionLink(company.Name, "View", new { id = company.Id })
データベース呼び出しをトリガーしない (アクション メソッドが呼び出されないため) ため、tml.ActionLink(company.Name, MVC.Company.View(company.Id))
DB 呼び出しもトリガーしないようにする必要があります。それは、絶対に得られない過度のデータベース呼び出しです。
T4MVC がこのように機能するように作成された理由はありますか?
編集:これはCompanyControllerの宣言です
public partial class CompanyController : MyCustomBaseController
{
public CompanyController(IUnitOfWork unitOfWork)
{
}
public virtual ActionResult Add(int jobSearchId)
{
}
public virtual ActionResult Edit(int id)
{
}
[HttpPost]
public virtual ActionResult Edit(Company company, int jobSearchId)
{
}
public virtual ActionResult View(int id)
{
}
}
public class MyCustomBaseController: Controller
{
public MyCustomBaseController()
{
}
public int CurrentUserId { get; set; }
}