繁体   English   中英

城堡:按惯例注册接口代理

castle: register interface proxies by convention

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想注册实现字典适配器的多个组件,但是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))));

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

2 个回复

我做这样的事情

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

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

因此,如果我要求Castle提供一个名为IFooSettings的接口,则Castle默认情况下将返回FooSettings类。

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

现在可以在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))));

您必须使用“类型”,它也要拾取接口

1 温莎城堡:按惯例注册,开放通用

我有一个像这样的界面: 我有一个像这样的基类: 我有一个像这样的课程: 没有约定,我成功注册为: 我可以像这样成功解析一个对象: 但是,当尝试通过约定进行如下注册时: 我无法像上面那样解决。 是什么赋予了? ...

2 温莎城堡:按惯例通过命名零件注册

我正在使用温莎城堡作为我的DI容器。 我注册了服务并指定了一个名称: 问题是我的系统中有很多服务,我已经厌倦了注册每个服务。 我如何才能按照惯例做到这一点而又不丢失Named部分? (我不介意使用与班级相同的名称来调用我的服务) ...

3 城堡接口代理没有目标

我试图为没有目标的接口创建一个代理,当我在生成的代理上调用一个方法时,我总是得到一个System.NullReferenceException ,尽管拦截器总是被很好地调用。 这是接口和拦截器的定义: 这是主程序: 调用拦截器,但我从DynamicProxyGenAssem ...

5 温莎城堡 - 按照惯例登记

我有一个项目使用Castle Windsor作为DI容器。 最初它是一个小项目,所以我一直在单独注册每个类,但是项目现在正在增长,所以我想按惯例注册,但是我发现文档很难适用于我的情况。 在没有详细介绍的情况下,我有一个项目,其中包含遵循命名约定的接口,例如IUserService.c ...

8 温莎城堡注册多种类型的基本接口?

我知道如何使用Autofac做到这一点,但不了解Castle。 我想使用IAmBaseInterface注册实现AmClass(和任何其他实现)。 这可能吗? 我尝试了以下操作,但未注册类型。 也尝试过此方法,类似于AutoFac,但没有成功。 ...

10 温莎城堡注册实现特定接口的所有组件

我有多个实现IPollingService接口的组件,我想按惯例将它们全部注册。 顺便说一句,我没有看到任何组件在容器中注册,我似乎无法解决它们。 任何想法? 我尝试了以下操作,但无法解决它们: 从屏幕快照中可以看到,已加载了0个实现。 我还注意到,如果我尝试以这种方式 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM