0

我想注册多个实现字典适配器的组件,但 AllTypes.From.. 只选择类类型。我想做这样的事情:

        container.Register(AllTypes.FromAssemblyContaining<IFooSettings>()
            .Where(type => type.IsInterface)
            .Configure(component =>
                component.UsingFactoryMethod((kernel, model, creationContext) => new DictionaryAdapterFactory().GetAdapter(creationContext.RequestedType, ConfigurationManager.AppSettings))));

现在我似乎无法创建自己的“AllTypes”版本,因为 FromTypesDescriptor ctor 是内部的。有什么想法可以做到这一点吗?

4

2 回答 2

1

这现在适用于 Castle 3.3.0:

var dictionaryAdapterFactory = new DictionaryAdapterFactory();

container.Register(
        Types.FromThisAssembly().Where(t => t.Name.EndsWith("Settings") && t.IsInterface)
            .Configure(component => component.UsingFactoryMethod((kernel, model, creationContext) => dictionaryAdapterFactory.GetAdapter(creationContext.RequestedType, ConfigurationManager.AppSettings))));

您必须使用“类型”,它也可以选择接口

于 2016-06-22T06:50:53.167 回答
0

我做这样的事情

    container.Register(
        AllTypes
            .FromThisAssembly()
            .Pick()
            .WithService.DefaultInterface()
            .Configure(r => r.LifeStyle.Transient));

这会根据匹配的接口和类名注册组件。

因此,如果我要求 Castle 提供一个名为的接口,IFooSettings那么 Castle 默认会返回该类FooSettings

您可以使用一系列规则进行注册,您可以在此处查看它们。不建议使用您在示例中使用的工厂方法。

于 2012-09-14T14:15:35.287 回答