我在我的项目中使用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