首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Castle Windsor:如何测试所有已注册的组件是否可解析?

在云计算领域,Castle Windsor是一个流行的.NET依赖注入容器框架,用于实现依赖注入和控制反转。要测试所有已注册的组件是否可解析,可以使用Castle Windsor的内置功能或编写自定义测试。

以下是一些可能的解决方案:

  1. 使用container.Kernel.GraphNodes获取所有组件的节点,并遍历所有节点以确保它们都可以解析。
代码语言:csharp
复制
var unresolvedComponents = new List<string>();
var graphNodes = container.Kernel.GraphNodes;

foreach (var node in graphNodes)
{
    try
    {
        container.Resolve(node.ComponentModel.Service);
    }
    catch (Exception ex)
    {
        unresolvedComponents.Add(node.ComponentModel.Name);
    }
}

if (unresolvedComponents.Any())
{
    throw new Exception($"以下组件无法解析:{string.Join(", ", unresolvedComponents)}");
}
  1. 使用container.Kernel.AddHandlersFilter添加一个过滤器,以便在解析组件时执行自定义操作。
代码语言:csharp
复制
container.Kernel.AddHandlersFilter(
    (kernel, handlers) =>
    {
        foreach (var handler in handlers)
        {
            try
            {
                container.Resolve(handler.ComponentModel.Service);
            }
            catch (Exception ex)
            {
                throw new Exception($"组件“{handler.ComponentModel.Name}”无法解析。", ex);
            }
        }

        return handlers;
    },
    phase: HandlerPriority.Last);
  1. 使用container.Kernel.Resolver.AddSubResolver添加一个自定义解析器,以便在解析组件时执行自定义操作。
代码语言:csharp
复制
container.Kernel.Resolver.AddSubResolver(
    new Resolver(
        handler =>
        {
            try
            {
                container.Resolve(handler.ComponentModel.Service);
            }
            catch (Exception ex)
            {
                throw new Exception($"组件“{handler.ComponentModel.Name}”无法解析。", ex);
            }

            return true;
        }));

这些方法可以帮助您测试所有已注册的组件是否可以解析。在实际应用中,您可能需要根据具体情况选择最适合您的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

事件总线知多少(2)

下面我们就以Castle Windsor作为我们IOC容器为例,来讲解下如何解除依赖。 4.1....了解Castle Windsor 使用Castle Windsor主要包含以下几步: 初始化容器:var container = new WindsorContainer(); 使用WindsorInstallers...使用Castle Windsor 使用IOC容器目的很明确,一个是在注册事件时完成依赖注入,一个是在触发事件时完成依赖解析。从而完成事件动态绑定和触发。 4.2.1....因为Castle Windsor在3.0版本取消了UnRegister方法,所以在进行事件注册时,就不再手动卸载IOC容器中注册依赖。...拿到程序集后就可以将所有IEventHandler实现注册到IOC容器,然后再基于IOC容器注册IEventHandler动态映射事件源和事件处理。

1.1K70

【C#】使用 Castle 实现 AOP,以及 Autofac 集成 Castle

发展到现在已经有四个组件: ORM组件:ActiveRecord IOC组件Windsor 动态代理组件:DynamicProxy Web MVC组件:MonoRail 本文主要介绍 动态代理组件 Castle.DynamicProxy...基本用法 Castle.DynamicProxy 是通过 Emit 反射动态生成代理类来实现,效率相对静态植入要慢一点,但比普通反射又高一些。...所以这里是要对返回值进行一个判断。 可以使用 Castle.Core.AsyncInterceptor 包,它包装了 Castle,使异步调用更简单。...Autofac 集成 Autofac.Extras.DynamicProxy 是一个 Autofac 扩展,Castle 一起提供 AOP 拦截。...//注册拦截器 builder.RegisterType().AsSelf(); //注册要拦截服务 builder.RegisterType

1.1K30

02Prism WPF 入门实战 - 建项

Prism 开发文档:https://prismlibrary.com/docs/ Prism是一个框架,用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松散耦合、维护和测试...组件级别的复用是通过依赖注入来轻松地发现和集成单元测试级别的组件。应用级别的复用是重用封装了应用级别能力模块。 扩展。...通过让团队专注于不同功能领域或业务功能领域来减少团队之间依赖。 质量。Prism通用让开发团队充分地测试服务和组件提高程序质量。...此外,由于通用服务和组件都被完全地测试过了,开发团队能够专注于程序需求而不是如何实现和测试基础代码。(以上内容均来自网络。)...IoC框架有很多种例如MEF、Autofac、Castle Windsor、Unity。 初学简单理解为有两个部分组成一个业务容器,和若干个业务模块组成。都塞到容器中进行管理。

76410

支持Visual Studio 2008和.NET 3.5企业类库4.0

这个版本最大亮点是把IOC框架集成Unity进来了。 1、也许你还不知道Unity是微软模式与实践团队开发轻量级,扩展依赖注入容器,支持依赖注入构造函数注入,属性注入,还支持方法调用注入。...如果你有使用其他IOC容器经验,例如Castle Windsor, SpringFramework.NET, StructureMap等。...Unity资料参看Unity Application Block 发布,微软名为Unity依赖注入Application Block发布了。...2、支持WMI2.0,EntLib 4中,所有的应用代码块主要工作类型都有自己独立WMI类型对象,运行监控机制可以用类似SQL语句方式直接检索运行组件性能计数或配置属性情况,企业应用中运营监控是一项非常重要工作...,也就很容易扩展集成分布式缓存,.NET框架下有好几个分布式缓存组件,其中也有几个开源分布式缓存组件memcached和分布式内存对象系统indeXus.Net SharedCache。

87990

ASP.NET Core appsettings.json文件(9)《从零开始学ASP.NET CORE MVC》:

中,依赖注入是可选,要配置它,我们必须使用像Ninject,autofac、castle windsor等第三方框架。...在 asp. net Core 中, 依赖注入是不可或缺一部分。依赖注入能使我们能够创建低耦合、扩展且易于测试系统。 我们将在即将推出视频中详细讨论依赖注入,尽情期待。...ASP.NET Core IConfiguration 服务 IConfiguration 服务是为了从asp.net Core 中所有各种配置源读取配置信息而设计。...如果在多个配置源中具有相同密钥名称配置设置,简单来说就是重名了,则后面的配置源将覆盖先前配置源 。 几个地方演示,分别是如何替换。...{Environment}.json 用户机密 环境变量 5.命令行参数 如果您想要改变他们调用顺序,甚至往里面添加属于自己自定义配置信息,我们将在后面的课程中讨论如何自定义配置源。

1.3K20

ASP.NET Core开发者成长路线图

依赖注入 DI容器 Microsoft.Extensions.DependencyInjection AutoFac Ninject StructureMap Castle Windsor 生命周期...单元测试 测试框架 MSTest NUnit xUnit 模拟工具 Moq NSubstitute FakeItEasy 断言工具 FluentAssertion Shouldly 行为测试 BDDfy...SpecFlow LightBDD 集成测试 WebApplicationFactory TestServer 端到端测试 Selenium Puppeteer-Sharp 任务调度 HangFire...改进博客园Markdown显示功能(加代码行号、显示代码所用编程语言) 当今最全面可用微博分享组件嵌入方法(亲测2019年2月仍有效) 前端小白也能快速学会博客园博客美化全攻略 - 附源码 史上最最靠谱...,又双叒叒简单基于MSXMLXML解析指南-C++ 相关链接: ASP.NET Core 中文文档目录 - .NET_CORE_COMMUNITY - 博客园 本文首发于本人博客园博客,转载请注明出处

2.1K30

一个简单小程序演示Unity三种依赖注入方式

为了展示Unity如何实现几种典型注入方式(构造器注入、属性注入和方法注入),我写了一个简单小程序。...然后调用它泛型Resolve方法创建一个实现了泛型接口IA对象。最后将返回对象转变成类型A,并检验其B、C和D属性是否是空。...这个简单程序分别体现了接口注入(通过相应接口根据配置解析出相应实现类型)、构造器注入(属性B)、属性注入(属性C)和方法注入(属性D)。 1: a.B == null ?...所谓依赖注入,就是由外部容器在运行时动态地将依赖对象注入到组件之中。具体依赖注入方式又包括如下三种典型形式。...在开源社区,具有很有流行IoC框架,比如Castle Windsor、Unity、Spring.NET、StructureMap、Ninject等。

1.7K70

.net 应用迁移到Mono 工具 (Moma)

工具通过分析.dll或者.exe程序集代码是否符合ECMA CLI,大家都知道符合ECMA CLI标准.net 程序可以运行于MS .net和Mono平台。...这个工具使用Cecil,这是一个用于检测代码是否符合ECMA CLI标准类库,Mono网站上小工具还真多。...、属性,事件引用所有方法,报告方法存在问题,使用很简单。...平台调用通常是用来调用非托管方法,尤其是平台本身提供方法。 命令行执行 MoMa从1.9版开始就支持命令行执行功能。...若要用命令行设定要检查组件并启动MoMa,可以像下面这样: MoMA C:\app\myapp.exe 若要用设定加入多个要检查组件并启动MoMa,可以像下面这样: MoMA C:\app\myapp.exe

1.6K80

Asp.net mvc 知多少(十)

什么是松耦合以及如何实现松耦合? Ans. MVC设计模式最重要功能之一就是关注点分离。 因此,我们应用程序模块应该尽可能保持独立,也就是保持松耦合。...DI是一种很好方式去减少软件模块之间紧耦合关心。DI帮助更好去管理软件中功能更新和复杂度。DI目的是让代码维护。...列举如下: Castle Windsor 基于 Castle MicroKernel 详细文档 使用者多 Understands Decorator(理解装饰器) Typed factories(类型工厂...TDD是一个开发原则,在写代码之前先写测试测试驱动应用程序设计和开发周期。 在所有测试通过之前,不能签入代码。 ? Q100. ASP.NET MVC中有哪些常用单元测试工具?...ASP.NET MVC被设计为测试,而不需要依赖IIS、数据库或额外类。 以下是比较流行测试工具: • NUnit - NUnit是 Microsoft .NET上比较流行单元测试框架。

1.2K100

ASP.NET MVC 4 - 测试驱动 ASP.NET MVC

在本文中,我将论述用于增强您 ASP.NET MVC 应用程序测试最佳做法和技术,包括如何建立您解决方案结构、设计代码架构以便处理依赖关系注入以及使用 StructureMap 实现依赖关系注入...在命名项目时添加测试类型是很有必要避免命名冲突以及确定您在编辑器内处理测试类型。图 4 显示具有测试项目的解决方案资源管理器。 ?...有许多可用于 .NET DI/IoC 框架,包括 Unity(Microsoft 产品)、StructureMap、Castle Windsor 和 Ninject 等。...解析代码中依赖关系 在完成了所有困难工作后,解析代码中依赖关系就很简单了。...如图 11 中所示,我已将一个 IEmployeeService 参数添加到了 HomeController 构造函数。在新控制器工厂中解析控制器时,将自动解析该控制器构造函数所要求所有参数。

5.4K70

微软Enterprise Library 4.0将支持依赖注入

依赖注入是指一个类实现部分上是由另一个类来执行情况,这个类就是注射类。某些时候,它们是注射类多个不同变种(或是其子类)。主类抽象出所有实现所需通用代码,并在需要特定行为地方委托给注射类。...微软展示了通过向Enterprise Library中增加依赖注入,以更好地利用模块化设计重要性: 内聚组件式模块化设计好处现在已经获得了普遍认可,它可以让组件与软件系统其它部分只产生少许或完全没有耦合...依赖注入就是彻底解决耦合和减轻组件依赖一种机制。轻量级依赖注入容器有助于将组件装配(组件也可能来自不同项目)到一个运行时内聚应用中,同时促进代码重用。...此外,为了展示现实世界中项目该如何有效使用依赖注入,我们打算重构一个EntLib块,抽像掉其中配置代码(配置器)。我们还将创建一个EntLibFacade,以将所需独立配置器注入其中。...一些现存.NET应用框架早已支持依赖注入,而且可以与新应用程序协同工作,比如: Castle Windsor StructureMap Spring.NET Ninject 使用这些容器组织可以在他们已有的基础结构中应用新

771100

Castle 整合.NET Remoting

今天研究了一下CastleRemoting Facility.记录如下: 微软以前使用COM/DCOM技术来处理分布式系统架构,通过Client端Proxy代理程序来呼叫远程Server机器上对象...若使用HTTP Channel ,则使用SOAP协议来收送信息,所有的信息会被发送到SOAP Formatter中,被序列化(serialized)成XML格式,而SOAP所需headers也会被加入...Client端使用Remoting对象 步骤1:建立Remoting对象 建立一个MathServer对象类别,提供Sum方法,给予一连串整数由Sum方法代为计算总和。...指出在Server端注册所要使用组件、服务名称及启动方式。...其中component表示一个执行个体可供多个前端来呼叫,保留其状态,另一种则为ClientActivated,一个执行个体只能服务一个前端呼叫,无法保留其状态。

49980

Asp.Net Web API 2第十一课——在Web API中使用Dependency Resolver

Resolver在控制器中如何注入依赖。...一个简单dependency resolver  下面的代码展示了一个简单dependency resolver。这个代码主要只是展示了在Web API中依赖注入如何工作。...Dependency Injection with IoC Containers 一个Ioc容器就是一个软件组件,它负责创建依赖。Ioc容器为依赖注入提供公共框架。...如果你使用一个Ioc容器,你不需要在代码中直接连同对象,几个开源.Net Ioc容器是可以利用,例如Autofac, Castle Windsor, Ninject, Spring.NET, StructureMap...这个IoCContainer 类实现了全局范围内依赖解析。并在BeginScope 方法中创建一个新ScopeContainer对象。这个Unity 容器也有一个子容器概念。

69440

使用 MEF 轻松实现云部署

在本文中,我们将看看如何使用 MEF 使云部署更易于管理一点、更灵活一些。MEF(以及 Unity 之类类似框架)是一种软件结构,可将开发人员从管理依赖关系解析、对象创建和实例化等工作中释放出来。...请注意,尽管我们在此处使用是 MEF,但使用 Unity、Castle Windsor、StructureMap 或其他任何类似容器并按照相似结构应该会取得相同结果,主要差异体现在语法和类型注册语义上...对于在启动时应用程序,这也会造成一点儿额外工作。图 2 描绘了在 Global.asax 调用我们创建名为 MEFContext 帮助程序类时该 Global.asax 中启动工作。...有时候,您希望某一类型所有实例都超出其实际模板类型。目前,实现此目标的最简单方式是注册一个字符串约定名称,它将是您项目或解决方案中达成一致约定。在本例中,如前所述声明将适用。...遗憾是,当前对象模型没有适当接口或者轻松重复使用定义代码库,因此,使用一点继承以及一些封装可能是最佳选择。

1.3K70

abp vnext2.0核心组件之模块加载组件源码解析

abp vnext是abp官方在abp基础之上构建微服务框架,说实话,看完核心组件源码时候,很兴奋,整个框架将组件细想运用很好,真的超级解耦.老版整个框架依赖Castle问题,vnext对其进行了解耦...RabbitMQ实现版本,Aop拦截器依然采用Castle.Core.AsyncInterceptor.这一点Dora.Interception貌似可以解决,估计如果高度组件化,那么这也是一个扩展点....这段代码很简单,就不解释了.DependencyAttribute特性给上对应值就能执行指定操作,ok,到这里总结一下这种设计用处,非常nice,原先老版abp注册系统核心单例类型是依赖castle...将当前模块类型对应程序集中所有的类型写入DI,默认注入规则上面已经介绍,默认注册器类型为DefaultConventionalRegistrar.同时执行生命周期接口IZcfModule....下一篇会介绍vnext如何完成整个DI切换,换成autofac或者其他容器.以及如何和模块加载系统结合.

1.1K30
领券