oro*_*edd 9 .net castle-windsor lazy-loading
偶尔我发现自己处于这样一种情况,即只有满足某个条件才需要解析服务.例如,用户可能选择发送电子邮件或短信通知.我想懒得加载电子邮件或短信服务取决于用户选择的内容,这样我就不必加载它们并浪费资源(例如,如果有用户的10个选项......? ).
我遇到的问题是在我的引导程序代码之外使用容器(我不希望我的代码依赖于容器).我似乎找不到使用容器进行延迟加载服务的方法(除非我手动创建所需的服务并手动完成所有DI).这种情况是规则可以弯曲还是有更好的方法?
如果您使用的是Castle Windsor 3.0或更高版本,则可以使用延迟解析.
有关详细信息,请参阅Windsor 3中的新功能.
注册过程稍有变化(必须注册新的组件加载器).
之后,您只是一如既往地注册组件,而是解决依赖关系Lazy<T>而不是T.在您不访问.Value属性之前Lazy<T>,依赖关系将无法解析,因此您可以传递几个延迟评估的对象,并且只能访问您需要的对象.
如果您有更多用户选择,也许您应该考虑创建某种抽象工厂界面.然后,您将只注册并解决此工厂,工厂本身将为发送通知(无论是邮件还是短信或任何其他选项)创建适当的服务.工厂的实施可以手工编码,或者温莎城堡可以用你编写(我认为从3.0版开始).
很多时候,当我使用这样的工厂,我的手实现它,并通过容器,因为它的依赖性,所以只有工厂实现取决于我的容器上.
| 归档时间: |
|
| 查看次数: |
3736 次 |
| 最近记录: |