私はasp.net-mvcサイトを持っており、IOCを行うためにLinFuを使用しています。いくつかのアクションに依存関係があり、コントローラーに注入したいのですが、依存関係に依存するアクションを呼び出す場合にのみ依存関係を初期化したいという問題が発生しました。
だから私のコントローラーでは、私のコントローラーにこのコードがあります:
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を開始するにはかなりの費用がかかるため、私の問題は2つのことを解決したいということです。
IPeopleImporterの実装を「プラグイン可能」にして、インターフェイスでコントローラーにIOCできるようにしたい
アクションがたくさんあるので、ユーザーがIPeopleImporterを必要とする特定のアクションを呼び出さない場合に、IPeopleImporterを開始するコストをかけたくありません。上記のコードでは、PersonControllerを呼び出すたびにその開始を行っているようです
私の開始コードは次のようなものです。
this.AddService(typeof(IPeopleImporter), typeof(DatabaseImporter), LifecycleType.Singleton);
これは一般的なパターン/問題のようです。推奨される解決策はありますか?それまでの間、代替案(パフォーマンスへの影響を回避するために、コントローラー内の概念の実装を単純に「新規」にすること(およびIOCを回避すること)はありますか?