2

我有一个普通的 Castle Windsor 组件注册命令:

container.Register(Component.For<IEntity>()
                            .UsingFactoryMethod(() => new EntityFactory().CreateEntity()));

我需要 XML 配置替代方案来扩展我的 UCommerce。我已尝试按照此处所述进行注册,但由于异常而无法正常工作:

无法将字符串 'Castle.Facilities.FactorySupport.FactorySupportFacility, Castle.Facilities.FactorySupport' 转换为类型。未找到程序集。确保它已部署并且名称没有输入错误。`

有没有人面临同样的挑战?

4

1 回答 1

3

请注意链接文章顶部的免责声明:

优先UsingFactoryMethod于这个工具:虽然该工具提供了程序化 API,但它已被弃用,不鼓励使用,此处不予讨论。推荐的方法是使用UsingFactoryMethodfluent 注册 API 的方法来创建组件。这限制了该工具对 XML 驱动和遗留场景的有用性。

如果您仍然想使用 XML(确保您有充分的理由),那么您需要采取两个步骤:

  1. 修复异常。 它说它找不到名为“Castle.Facilities.FactorySupport”的程序集。这是一个与 Castle Windsor 分开分发的库,您可以从 NuGet 获取它。如果您确实安装了它,请确认您正在部署该程序集。

  2. 创建工厂对象。 该设施不支持使用任意方法;您必须给它一个类型并将其指向要使用的方法。所以,你会创建一个像这样的类型:

    public class EntityFactory
    {
        public IEntity Create()
        {
            return new EntityFactory().CreateEntity();
        }
    }
    

    然后您的 XML 配置将如下所示:

    <components>
       <component id="entityfactory"
                  type="Your.Namespace.EntityFactory, Your.AssemblyName"/>
       <component id="entity"
                  type="Your.Namespace.IEntity, Your.AssemblyName"
                  factoryId="entityfactory" 
                  factoryCreate="Create" />
    </components>
    
于 2016-04-11T14:07:57.610 回答