我在我的項目中使用Castle Windsor。我想要偷懶的決心服務和repositories.The樣本代碼:解決後發佈服務
public IPersonService PersonService
{
get { return _windsorContainer.Resolve<IPersonService>(); }
set { _windsorContainer.Resolve<IPersonService>(value); }
}
public ICityService CityService
{
get { return _windsorContainer.Resolve<ICityService>(); }
set { _windsorContainer.Resolve<ICityService>(value); }
}
public IPhoneService PhoneService
{
get { return _windsorContainer.Resolve<IPhoneService>(); }
set { _windsorContainer.Resolve<IPhoneService>(value); }
}
的問題是:當解決完了,怎麼我需要做的,釋放這些。 TNX
編輯
我頂班是:
public class PhonebookApplication
{
public WindsorContainer _windsorContainer;
private void InitializeWindsor()
{
_windsorContainer = new WindsorContainer();
_windsorContainer.Install(Configuration.FromXmlFile("Castle.config"));
}
public void Dispose()
{
if (_windsorContainer != null)
{
_windsorContainer.Dispose();
}
}
private static readonly Lazy<PhonebookApplication> s_Current = new Lazy<PhonebookApplication>(() => new PhonebookApplication(), true);
public static PhonebookApplication Current
{
get { return s_Current.Value; }
}
public void ApplicationStart()
{
InitializeWindsor();
}
//Service count increaseble as your have.
public IPersonService PersonService
{
get { return _windsorContainer.Resolve<IPersonService>(); }
set { _windsorContainer.Resolve<IPersonService>(value); }
}
public ICityService CityService
{
get { return _windsorContainer.Resolve<ICityService>(); }
set { _windsorContainer.Resolve<ICityService>(value); }
}
public IPhoneService PhoneService
{
get { return _windsorContainer.Resolve<IPhoneService>(); }
set { _windsorContainer.Resolve<IPhoneService>(value); }
}
}
}
,如果我想調用的方法在HomeController的,我用的方法PhoneBookApplication.Current.PhoneService.GetAllList()
,那麼我想調用release當前解析的服務,當方法調用完成後。如果我注入這個類的構造函數所有工廠類,屋頂類是如此依賴,因此我不想使用ctor注入任何地方。
謝謝您的回答,你的答案是我的部分答案,這situtation,如果我想運行一個方法,然後我依賴於注入「IPersonServiceFactory personServiceFactory」,但我不想訪問一個方法與注入,我想通過一個靜態屋頂類訪問方法。 Roof.PersonService.Blah()等。如何在沒有注入的情況下實現工廠。 – 2014-10-16 11:37:50
嗨,我可以實現工廠作爲攔截器? – 2014-10-16 12:23:26
不知道你的攔截器如何在這裏工作,你必須考慮什麼會觸發攔截器釋放組件。我想你可以確保所有的接口都繼承'IDisposable',並讓攔截器在調用處理方法時釋放組件。你有什麼理由不想注入工廠嗎?你可以使用'container.Release()'發佈組件,是關於如何讓組件自動發佈的更多問題?你的組件是否被註冊爲瞬態?你能給出更多的實際應用背景嗎? – Charleh 2014-10-16 13:28:15