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

看似循环依赖导致CastleWindsor出现问题分享

时间:2023-04-10 18:10:47 C#

看似循环依赖导致CastleWindsor出现问题().Where(type=>type.Name.EndsWith("Service")).WithService.DefaultInterface().Configure(c=>c.LifeStyle.Singleton));然后,我有IAuthenticationService,并在我的通用WindsorInstaller.cs文件中注册:container.Register(Component.For(typeof(IAuthenticationService)).ImplementedBy(typeof(AuthenticationService)));现在一切正常,直到我在UserService中为IAuthenticationService添加公共属性。注册时似乎存在循环依赖或一些时间问题,因为我收到错误:无法创建组件“ABCD.Services.UserService”,因为它具有需要满足的依赖关系。ABCD.Services.UserService正在等待以下依赖项:服务:-ABCD.Services.Interfaces.IAuthenticationService已注册但也在等待依赖项。ABCD.Services.AuthenticationService正在等待以下依赖项:服务:-ABCD.Services.Interfaces.IUserService已注册但也在等待依赖项。我怎样才能解决这个问题?您需要:摆脱循环依赖(这是首选选项),或者通过使用属性注入而不是构造函数注入来解决它们。使用属性注入(如Steven的回答所示)允许您创建类的实例,而无需在创建时提供所有依赖项。缺点是对于类的用户来说,需要做什么来实例化和完全配置一个实例并不明显。有关如何重构以删除循环依赖项的详细解释,请参阅Mi?koHevery的这篇博客文章:属性注入将解决您的问题,因为它打破了依赖循环。看看Krzysztof的例子,尝试实例化UserService;你不能。现在看看下面的例子:publicclassUserService{UserService(AuthenticationServicea){}}放;在此示例中,AuthenticationService的UserService依赖项是从“提升”为属性的函数参数构造的。现在你可以像这样创建一个用户服务:vara=newAuthenticationService();vars=newUserService(a);a.UserService=s;循环依赖可以使用属性注入来完成,并且可以使用任何依赖注入框架进行配置以允许属性注入。这是我理解的场景:publicclassUserService{UserService(AuthenticationServicea){}}publicclassAuthenticationService{AuthenticationService(UserServicea){}}您将如何创建两个类的实例,每个类最多创建一个实例?以上就是C#学习教程:看似循环依赖导致CastleWindsor的问题分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: