3

有可能通過在容器中註冊LazyOfTComponentLoader和解決到懶惰地解決在城堡溫莎的分量的Lazy<T>作爲指定here在城堡溫莎自動懶惰地解決組件

container.Register(
    Component.For<ILazyComponentLoader>().ImplementedBy<LazyOfTComponentLoader>(), 
    Component.For<ISomeService>().ImplementedBy<ServiceImpl>().LifestyleTransient() 
    ); 

var lazy = container.Resolve<Lazy<ISomeService>>(); 

lazy.Value.DoSomething(); 

然而,是否有可能寄存器容器中的一個組件,因此它總是解析爲Lazy<T>而不需要在解析調用中指定Lazy?

具體來說,我想知道如何在使用構造函數注入時將惰性組件注入到MVC項目中的控制器中。

編輯:您可以指定Lazy<ISomeService> someService作爲參數在控制器的構造函數中,可以看到here。但是,有沒有辦法確保通過註冊過程懶惰地解決組件問題?

回答

3

如果要解析延遲加載的組件實例,則需要執行Resolve<Lazy<ISomeService>>()。函數lazy.Value將執行組件的實際解析。如果你想做一個決定,你會直接得到你的組件。

如果你真的想擁有一個只在第一次使用時解析而不使用懶惰的組件,你可以求助於編寫一個攔截器。

祝你好運, Marwijn。