Service 为Agatha创建一个通用处理程序?

Service 为Agatha创建一个通用处理程序?,service,structuremap,layer,agatha-rrsl,Service,Structuremap,Layer,Agatha Rrsl,我将Agatha请求/响应库(以及Agatha 1.0.5.0使用的StructureMap)用于我正在原型化的服务层,我注意到需要创建大量处理程序。一般来说,任何请求/响应类型对都需要自己的处理程序。然而,当这扩展到一个大型企业环境时,将会有很多处理程序 我开始做的是将企业域划分为逻辑处理器类(几十个处理器,而不是数百个或可能最终数千个处理器)。约定是,每个请求/响应类型(都继承自域基请求/响应对,继承自Agatha的)在某个处理器中只获得一个函数 通用处理程序(继承自Agatha的Reque

我将Agatha请求/响应库(以及Agatha 1.0.5.0使用的StructureMap)用于我正在原型化的服务层,我注意到需要创建大量处理程序。一般来说,任何请求/响应类型对都需要自己的处理程序。然而,当这扩展到一个大型企业环境时,将会有很多处理程序

我开始做的是将企业域划分为逻辑处理器类(几十个处理器,而不是数百个或可能最终数千个处理器)。约定是,每个请求/响应类型(都继承自域基请求/响应对,继承自Agatha的)在某个处理器中只获得一个函数

通用处理程序(继承自Agatha的RequestHandler)然后使用Handle方法中的反射来查找给定TREQUEST/TreResponse的方法并调用它。如果找不到一个或找到多个,则返回一个包含错误消息的TreResponse(消息在域的基本响应类中标准化)

这里的目标是允许整个企业的开发人员只关心在域中编写他们的请求/响应类型和处理器函数,而不必花费额外的开销来创建处理程序类,这些处理程序类将执行完全相同的操作(将控制权传递给处理器函数)

然而,似乎我仍然需要为每个请求/响应类型对定义一个处理程序类(尽管是空的,因为基本处理程序负责所有事情)。否则,向服务分派请求时将引发以下异常:

StructureMap异常代码:202 没有为PluginFamily Agatha.ServiceLayer.IRequestHandler`1[[TSFG.Domain.DTO.Actions.HelloWorldRequest,TSFG.Domain.DTO,版本=1.0.0.0,区域性=中性,PublicKeyToken=null]]定义默认实例,Agatha.ServiceLayer,版本=1.0.5.0,区域性=中性,PublicKeyToken=6f21cf452a4ffa13

有没有一种我没有看到的方法可以告诉StructureMap和/或Agatha始终对所有请求/响应类型对使用基本处理程序类?或者使用Reflection.Emit在应用程序启动时在内存中生成空的处理程序来满足需求


我对这些库不是100%熟悉,并且在不断学习,但到目前为止,我在这两种可能的方法上的尝试都没有成功。有谁能就解决这个问题提供一些建议,或者完全提供另一种方法吗?

我对阿加莎不熟悉。但是,如果希望所有对
IRequestHandler
的请求都由
BaseHandler
完成,则可以使用以下StructureMap注册:

For(typeof(IRequestHandler<>)).Use(typeof(BaseHandler<>));
For(typeof(IRequestHandler))。使用(typeof(BaseHandler));

当某个东西需要一个
IRequestHandler
时,它应该得到一个
BaseHandler

我需要清理一些脏活,但你肯定为我指明了正确的方向。我以前的自定义处理程序被定义为:公共类DomainRequestHandler:RequestHandler where TREQUEST:BaseRequest where treresponse:BaseResponse,new()但现在是:公共类DomainRequestHandler:IRequestHandler,其中TREQUEST:BaseRequest这涉及到为接口实现更多的过程,而这些过程实际上还没有做任何事情,所以我将看看如何进行。谢谢Ug,很抱歉这里的格式不好。我希望StackOverflow可以保持间距:(