我使用asp.net MVC 2和Ninject 2.Ninject給NullReferenceException
設置非常簡單。 控制器調用調用存儲庫的服務。
在我的控制器中,我使用注入來實例化服務類沒有問題。但是服務類不會實例化這些存儲庫,給我NullReferenceException。
public class BaseController : Controller
{
[Inject]
public IRoundService roundService { get; set; }
}
This Works。但隨後這個不...
public class BaseService
{
[Inject]
public IRoundRepository roundRepository { get; set; }
}
給予一個NullReferenceException,當我嘗試使用roundRepository我RoundService類。
IList<Round> rounds = roundRepository.GetRounds();
模塊類... 公共類ServiceModule:NinjectModule { 公共覆蓋無效負載() { 綁定()。爲了().InRequestScope(); }}
public class RepositoryModule : NinjectModule
{
public override void Load()
{
Bind<IRoundRepository>().To<RoundRepository>().InRequestScope();
}
}
在global.axax.cs
protected override IKernel CreateKernel()
{
return new StandardKernel(new ServiceModule(),
new RepositoryModule() );
}
是的,如果我把構造函數注入到主要的服務類中,而不是在基類中,那就行了。我想這是因爲帶有基類參數的構造函數永遠不會被調用,只是默認的無參數。我對所有這些IOC/DI都很陌生,但它讓我以一種新的方式思考事情,這很好。 – Iceman 2010-04-05 11:08:49
如果你的基類有一個依賴項,那麼我就不會有一個無參數的構造函數,因爲你再次隱藏了依賴項。而是讓你的派生類調用正確的構造函數。我會編輯我的答案來舉個例子。 – Charlino 2010-04-05 21:15:15