当前位置: 首页 > 编程语言 > C#

架构问题:使用依赖注入导致垃圾API共享

时间:2023-04-10 12:46:47 C#

架构问题:使用依赖注入导致APIUI层界面垃圾。此类表示特定聚合根中的一组数据,由单个IDint检索。构造函数有四个参数:_lawbaseAssetRepository=lawbaseAssetRepository;_assetChecklistKctcPartRepository=assetChecklistKctcPartRepository;_user=用户;加载清单();}UI层通过IAssetRegister接口访问这样的。CastleWindsor可以自己提供ILawbaseAssetRepository和IAssetChecklistKctcPartRepository参数,但UI代码需要提供另外两个使用匿名类型:intcaseNumber=1000;用户user=GetUserFromPage();IAssetRegisterassetRegister=Moose.Application.WindsorContainer.Resolve(new{caseNumber,user});从API设计的角度来看,这是垃圾。UI层开发人员没有办法知道IAssetRegister需要整数和用户。他们需要知道类的实现才能使用它。我知道我这里一定有某种设计问题。谁能给我一些指示?正如Morten指出的那样,将不可注入的依赖项从构造函数调用移动到实际需要使用它的方法,如果你有不能(或很难)注入的构造函数参数,你将无法自动将IAssetRegister注入到任何需要它的类型中。当然,您始终可以使用以下IUserProvider行的具体实现创建一个IUserProvider接口:..返回GetUserFromPage();}}因此创建了另一个可注入的依赖项,其中没有。现在您不需要将用户传递给可能需要它的每个方法。尝试将消息与行为分开。创建一个包含操作数据的类,以及另一个包含该操作的业务逻辑的类。例如,创建这个命令:publicclassRegisterAssetCommand{[Required]publicintCaseNumber{get;放;}[必需]publicUserOperator{get;放;}}现在定义一个用于处理业务命令的接口:publicinterfaceICommandHandler{voidHandle(TCommandcommand);您的演示代码现在看起来像这样:varcommand=newRegisterAssetCommand{CaseNumber=1000,Operator=GetUserFromPage(),};varcommandHandler=WindsorContainer.Resolve);commandHandler.Handle(命令);注意:如果可能,将commandHandler的职责移出表示类并将其注入该类的构造函数(再次构造函数注入)。不,您可以像这样创建ICommandHandler的现实:publicclassRegisterAssetCommandHandler:ICommandHandler{私有IAssetChecklistKctcPartRepositoryassetRepository;publicRegisterAssetCommandHandler(ILawbaseAssetRepositorylawbaseAssetRepository,IAssetChecklistKctcPartRepositoryassetRepository){this.lawbaseAssetRepository=lawbaseAssetRepository;this.assetRepository=assetRepository;}publicvoidHandle(RegisterAssetCommandcommand){//可选地验证命令//执行命令}}或者,您甚至可以通过在RegisterAssetCommand中注入IUserProvider让用户退出RegisterAssetCommandHandler。IUserProvider接口可以具有处理程序可以调用的GetUserForCurrentContext。我希望这是有道理的。以上就是C#学习教程:架构问题:使用依赖注入导致垃圾API分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: