基于这个问题的答案:带有ninject的循环依赖和这个问题:Ninject:将父实例给正在解决的孩子这两个都说只要您将范围更改为,您就可以使用两种方式属性注入来解决循环依赖不是默认的瞬态作用域。所以我尝试这样做,我有一个需要彼此的 aUserService
和 a GroupService
(请不要说更改课程或使用第三个课程等!)。我有一个EntityServiceFactory
使用 ninject 的泛型,如下所示:
public static class EntityServiceFactory
{
public static TServiceClass GetService<TServiceClass>()
where TServiceClass : class
{
IKernel kernel = new StandardKernel();
return kernel.Get<TServiceClass>();
}
}
还有我的服务:
public class GroupService : EntityService<GroupRepository, Group, DbContext>
{
public UserService _userService { private get; set; }
public GroupService(GroupRepository repository, UserService userService) : base(repository)
{
userService._groupService = this;
}
public class UserService : EntityService<UserRepository, User, DbContext>
{
public GroupService _groupService { private get; set; }
public UserService(UserRepository repository, GroupService groupService)
: base(repository)
{
groupService._userService = this;
}
然后按照这些问题的答案中的说明将以下内容添加到我的EntityServiceFactory
:
kernel.Bind<GroupService>().ToSelf().InCallScope();
kernel.Bind<UserService>().ToSelf().InCallScope();
但我仍然得到错误:
检测到两个服务的构造函数之间存在周期性依赖关系。
我是否正确地进行了双向属性注入?我该如何解决这个问题?