.net - 温莎城堡的延迟加载服务

标签 .net castle-windsor lazy-loading

有时,我发现自己处于仅在满足特定条件的情况下才需要解决服务的情况。例如,用户可能选择发送电子邮件或短信通知。我想根据用户的选择懒加载电子邮件或短信服务,这样我就不必同时加载它们和浪费资源(例如,如果有10个用户选项,那该怎么办...? )。

我遇到的问题是在 bootstrap 代码之外使用容器(我不希望我的代码依赖于容器)。我似乎找不到使用容器进行延迟加载服务的方法(除非我手动创建所需的服务并手动执行所有DI)。这是规则可以弯曲的情况还是有更好的方法呢?

最佳答案

如果您使用的是CaSTLe Windsor 3.0或更高版本,则可以使用延迟解析。

参见What's new in Windsor 3 for more details

注册过程稍有变化(必须注册新的组件加载程序)。

之后,您将像往常一样注册组件,但是将依赖项解析为Lazy<T>而不是T。在不访问.ValueLazy<T>属性之前,依赖关系将无法解决,因此您可以传递一些延迟评估的对象,并仅在需要时和需要时访问一个对象。

如果您对用户有更多选择,也许您应该考虑创建某种抽象工厂界面。然后,您将仅注册并解析该工厂,工厂本身将创建适当的服务来发送通知(无论是邮件,短信还是其他任何选项)。工厂的实现可以手工编码,CaSTLe Windsor可以用它编码(我认为从3.0版开始)。

通常,当我确实使用此类工厂时,我会手动实现它并通过容器作为其依赖项,因此只有工厂实现取决于我的容器。

关于.net - 温莎城堡的延迟加载服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14042581/

相关文章:

c# - 在这种情况下 Dispose() 会导致提前释放资源吗?

c# - 当配置中存在配置行时,Nhibernate.Util 导致 ProxyFactoryFactoryNotConfiguredException

c# - Entity Framework - 填充属性后运行函数

c# - CaSTLe Windsor接口(interface)的多种实现

c# - 城堡温莎传递参数

javascript - 单个 .js 文件与延迟加载

android - 在 Android 中使用 Lazy Loader 时 GalleryView 中的图像质量损失

c# - 具有包含 7 亿条记录的表的数据库

c# - 通过 nuget 安装时引用 Bootstrap 的问题

.net - GDI+ 中随机发生的 AccessViolationException