Jac*_*cek 4 .net c# model-view-controller ninject inversion-of-control
我有像下面的MVC代码.我使用nInject for IoC.我想知道当我推送请求时,例如SendMail有创建控制器对象,nInject为两个只读对象创建子对象:_mailSrv和_dbSrv,但我在这个请求中只需要一个变量.
是否可以将变量注入延迟加载.当代码需要对象时,它会被创建吗?
public class HomeController:Controller
{
private readonly IMailService _mailSrv;
private readonly IDatabaseService _dbSrv;
public HomeController:Controller(IMailService mailSrv, IDatabaseService dbSrv)
{
_mailSrv = mailSrv;
_dbSrv = dbSrv;
}
public ActionResult SendMail(string mailAddress)
{
_mailSrv.Do(mailAddress);
}
public ActionResult SaveToDatabase(int id, string data)
{
_dbSrv.Do(id, data);
}
}
Run Code Online (Sandbox Code Playgroud)
刚试了一下.
将Ninject.Extensions.Factory添加到项目中,并将成员变量更改为Lazy.
public class HomeController : Controller
{
private readonly Lazy<IMailService> _mailSrv;
private readonly Lazy<IDatabaseService> _dbSrv;
public HomeController(Lazy<IMailService> mailSrv, Lazy<IDatabaseService> dbSrv)
{
_mailSrv = mailSrv;
_dbSrv = dbSrv;
}
public ActionResult SendMail(string mailAddress)
{
_mailSrv.Value.Do(mailAddress);
}
public ActionResult SaveToDatabase(int id, string data)
{
_dbSrv.Value.Do(id, data);
}
}
Run Code Online (Sandbox Code Playgroud)
现在将懒惰地创建实例.
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |