问题标签 [typed-factory-facility]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
325 浏览

castle-windsor - 类型化工厂内存问题

如果我多次创建和处理我的容器,在每次创建时我注意到,由于类型化工厂,内存分配很大(此示例为 200kb,但实际应用程序中 ~2MB)会导致 OutOfMemory 异常

无工厂自动生成内存增长速度要慢得多。

//使用自动创建的工厂 -> 内存增长得更多...(参见任务 mngr)

Component.For().AsFactory(c => c.SelectedWith())

//使用我的工厂 w/o -> 内存增长得更少

//Component.For().ImplementedBy(),

0 投票
1 回答
341 浏览

.net - 如何将拦截器添加到 Castle Windsor 中的 Typed Factory Facility 工厂方法中

我在温莎城堡使用类型化工厂设施。我想在工厂方法生成它应该创建的实例时获得回调,以便为属性更改通知连接实例。这样我就不需要确保在调用工厂方法之后调用这个“创建后”步骤,而是将这个责任交给工厂。

有没有办法使用 Typed Factory Facility 或其他 Castle 功能在生成的工厂上注册回调或在用于执行回调的工厂上创建拦截器?

0 投票
1 回答
1190 浏览

castle-windsor - 温莎通用型工厂

我正在尝试将一个工厂类转换为获取某种类型的消息并将该消息类型的处理器解析为Typed Factory Facility的实现。

我开始的代码是这样的:

基于来自 Castle Windsor的以下博客文章文档,我创建了以下内容:

当我打电话时,factory.GetAllProcessorsForMessage(new ExampleMessage()) 我收到以下错误:

无法将类型为“Castle.Proxies.IProcessor`1Proxy”的对象转换为类型“MyNamespace.Processors.IProcessor[]”。

我做错了什么,如何改进代码?

0 投票
1 回答
580 浏览

singleton - Windsor Typed Factory 设施,在使用单身生活方式时传递参数

我正在使用温莎城堡

我有两种组件类型,可以在运行时在 GUI 上选择实现。为了解决这个问题,我正在按名称解析它们。为了按名称处理它们,我使用了Typed Factory Facility

其中一种组件类型依赖于另一种。为了处理依赖关系,我将参数作为工厂方法/构造函数参数参数传递。

这是此工厂界面的编辑和删节版本:

请注意,我使用的是我自己的实现IMyDomainCommandFactory,而不是使用 Typed Factory 工具。那些工厂有故意复杂的行为,设施不适合他们的需要。

我注意到的问题是,如果我使用单例生活方式注册我的策略组件,我总是会返回相同的实例,即使我将不同的参数传递给 getter。

在我看来,这违背了Principal of Least Astonishment,但也许其他人有不同的看法 :) 这应该被认为是一个错误吗?

如果没有,是否有一种干净的方法可以让容器或工厂为每个参数组合只创建一个实例?

0 投票
1 回答
2490 浏览

castle-windsor - 如何配置 Castle Windsor 以根据提供给 Resolve() 的参数(“名称”除外)动态选择提供程序

我正在尝试学习如何使用 Castle Windsor IoC,但在理解如何配置一些我需要动态解析的对象时遇到了一些困难。基本上,我有几个 IDataSource 实现,我需要根据特定“数据源”的配置方式来选择要使用的实现。所以我可能有相当多的数据源配置为使用这 3 个实现之一。我的期望是,依赖代码将依赖于工厂方法,当它提供“数据源 ID”以及数据源实现所需的依赖项(IPrincipal)时,它将为它们提供正确的 IDataSource。

我正在为如何正确编写温莎的注册代表而苦苦挣扎。以下是我所掌握的大致内容。我正在尝试使用该DynamicParameters方法(这可能不是正确的使用方法)来执行确定要使用哪个实现然后调用Resolve以提取该特定版本的逻辑。但我不知道如何返回已解析的对象,因为DynamicParameters期待 a ComponentReleasingDelegate,我认为这意味着它应该类似于return k => { k.ReleaseComponent(dataSource); }. 但是,我如何将我获得的数据源返回给容器以使其返回给调用者?

编辑:通过切换DynamicParametersUsingFactoryMethod我能够做我想做的事。但我一直认为这是错误的,因为现在如果我这样做,container.ResolveAll()我真的希望它跳过工厂方法,但我不知道如何让它做到这一点。

0 投票
1 回答
591 浏览

castle-windsor - 当我按名称请求未注册的组件时,类型化工厂设施是否应该抛出异常?

如果我在容器中注册了一个带有名称的组件(别担心......人为的例子!)

并要求使用不同的名称解析该服务类型

我得到一个ComponentNotFound例外。但是现在如果我使用类型化工厂设施

并尝试使用工厂来解析假名

container.Resolve().GetDoubleByName("e")

我得到 pi而不是异常。似乎给ITypedFactoryComponentSelectorwhich 命名并没有帮助,它已经退回到仅使用Type( 在这种情况下double) 并抓住了针对它注册的第一件事。

0 投票
1 回答
455 浏览

dependency-injection - 可以禁用 Windsor 的 TypedFactoryFacility 的隐式委托工厂注册吗?

我们正在使用温莎的打字工厂设施,并认为它很可爱。我们使用基于接口的工厂。然而,我们想禁用基于委托的工厂的一些子集,特别是隐式注册的工厂。这些是违反直觉的,不是因为它们是代表,而是因为它们是神奇地创建的,并且可以延迟失败。

如果我们有一个将委托作为依赖的类

然后将其注册到已注册类型工厂设施的容器中。

我可以毫不费力地解决它,这起初是违反直觉的,因为没有人告诉容器我们有什么要说的Func<int,IPrincipal>

在我尝试实际使用隐式创建的工厂之前,我不会遇到失败。

虽然从某种角度来看这是有道理的,但这个工厂是隐式创建的这一事实很麻烦。这是一种非常容器感知的行为。编写任意类的人会发现通过委托参数化他们的行为很有用,一旦我们将它们放入 IoC 容器中,我们就会遇到这种令人惊讶的行为。

也就是说,有一个聪明的隐式工厂似乎值得保留。现在,Windsor 将为 form 的依赖项创建一个简单的工厂Func<T>,允许依赖项的使用者延迟实际创建。在 4.0 框架中,将其更改Lazy<T>为明确表明您只是在延迟构建T,而不是尝试访问将实施有趣策略的工厂,这可能是有意义的。

是否有一个聪明的开关可用于配置TypedFactoryFacility或者我们是否需要实现一些新对象来获得我们想要的行为?

0 投票
1 回答
404 浏览

castle-windsor - 通过xml使用自定义选择器配置城堡温莎TypedFactory?

我有以下配置:

问题是我需要用xml配置它。是否有等效的 xml 配置?

0 投票
0 回答
134 浏览

c# - Castle.Windsor:通过 2 个类型化工厂传递依赖项

类型:

登记:

问题:

我想要的是能够添加一个方法,IWidgetFactoryFactory该方法将采用IContextualService

然后创建工厂代理,以便在我调用IWidgetFactory.CreateFoo它时解决IContextualService通过新CreateFactory方法传递的参数的依赖关系。

请注意,我将IWidgetFactoryFactory.CreateFactory(IContextualService)在不同的上下文中创建和调用多个,并且我希望每个IContextualService都反映它被调用和传递的上下文。

关于如何做到这一点有什么想法吗?

更新: Castle-Dev 邮件列表上 有一个关于此问题的相关线程。

0 投票
0 回答
747 浏览

castle-windsor - 如何让温莎城堡工厂设施创建的实例仍然具有构造函数注入?

我对工厂设施有点陌生,所以如果我做的很愚蠢,请多多包涵。这是我的容器注册:

然后我从工厂解决(我构建了很多从配置中读取的内容,因此通过文本字符串创建)

(例如)

我感到困惑的是:如果我尝试为所有计算对象提供一个像这样的基本实例:

并像这样导出

然后 CW 抱怨缺少默认构造函数。

问题:当我使用工厂构建 calc 对象时,如何设置工厂设施以允许 EventAggregator 实例的注入(自动)?

提前致谢。


编辑:这是我的 CustomTypedFactoryComponentSelector:

}

编辑:继承事件聚合器。没什么特别的。

界面

和 ctor