一般的なレイジークラスを使用して、.netコア依存性注入拡張機能を持つ高価なクラスをインスタンス化しようとしています。私はIRepoタイプを登録しましたが、Lazyクラスの登録がどうなるか、サポートされているかどうかはわかりません。私はこの方法http://mark-dot-net.blogspot.com/2009/08/lazy-loading-of-dependencies-in-unity.html.netコア依存性インジェクションのサポートレイジー<T>
設定を使用している回避策として:
public void ConfigureService(IServiceCollection services)
{
services.AddTransient<IRepo, Repo>();
//register lazy
}
コントローラ:
public class ValuesController : Controller
{
private Lazy<IRepo> _repo;
public ValuesController (Lazy<IRepo> repo)
{
_repo = repo;
}
[HttpGet()]
public IActionResult Get()
{
//Do something cheap
if(something)
return Ok(something);
else
return Ok(repo.Value.Get());
}
}
"高価なクラスをインスタンス化する"。なぜそのクラスは費用がかかりますか?クラスは作成するのに費用がかかりません。彼らのコンストラクタは、[シンプル](http://blog.ploeh.dk/2011/03/03/InjectionConstructorsshouldbesimple/)、速く[信頼できる](http://blog.ploeh.dk/2011/03/04/)でなければなりません。信憑性のある情報を含むオブジェクトを作成します。 – Steven
いいえ(repository/context/...)クラスは、そのコンストラクタで接続を開く必要があります。 –
私が制御できない手段は高価です。 – ATerry