我有一个 asp.net-mvc 站点,我正在使用 LinFu 来做 IOC。我遇到了一个问题,其中许多操作具有我想注入控制器的依赖项,但我只想在调用依赖于它的操作时初始化依赖项。
所以在我的控制器中,我的控制器中有以下代码:
public PersonController
{
private IPeopleImporter _peopleImporter;
public override void Initialize(LinFu.IoC.Interfaces.IServiceContainer source)
{
_peopleImporter= source.GetService<IPeopleImporter>();
base.Initialize(source);
}
public JsonResult GetDetails(int id)
{
var p = _peopleImporter.Get(id);
var personDetails = new {p.Id, p.FirstName, p.LastName, StandardId = p.StandardIdLogin, p.PersonNumber};
return Json(personDetails);
}
}
启动 PeopleImporter 非常昂贵,所以我的问题是我想解决两件事:
我想让 IPeopleImporter 的实现“可插入”,这样我就可以在接口中将 IOC 放入控制器
我有很多操作,所以如果用户从不调用需要它的特定操作,我不希望启动 IPeopleImporter 的成本。似乎在上面的代码中,我在每次调用 PersonController 时都进行了初始化
我的初始化代码是这样的:
this.AddService(typeof(IPeopleImporter), typeof(DatabaseImporter), LifecycleType.Singleton);
这似乎是常见的模式/问题。有没有推荐的解决方案。同时,替代方案(避免性能损失是简单地“新建”控制器内部的概念实现(并避免 IOC)?