public class NotificationService: INotificationService{
private ILogService _logService;
public NotificationService(ILogService logService){
_logService = logService;
}
}
public class LogService: ILogService{
private INotificationService _notificationService;
public LogService(INotificationService notificationService){
_notificationService = notificationService;
}
}
我遇到了两个班级相互依赖的情况。我正在使用Ninject。
Bind<INotificationService>().To<NotificationService>();
Bind<ILogService>().To<LogService>();
上述代码导致循环依赖。 解决这个问题的正确方法是什么?请分享一些代码。
答案 0 :(得分:2)
循环依赖性表示软件中的设计或建模问题。虽然您可以使用属性注入来构造对象图,但是您将忽略根本原因并添加另一个问题:属性注入会导致Temporal Coupling。
相反,解决方案是密切关注设计。通常你会发现有第三个隐藏的&#39;需要抽象的服务。这两项服务都可以依赖这项新服务。
由于您的问题仅仅是接口名称和组件之间的依赖关系是非常高级的,因此很难具体,但这是一个可能的解决方案:
public class Logger : ILogger { }
public class NotificationService : INotificationService{
private ILogger _logger;
public NotificationService(ILogger logger){
_logger = logger;
}
}
public class LogService : ILogService {
private ILogger _logger;
public LogService(ILogger logger){
_logger = logger;
}
}
答案 1 :(得分:1)
对一个(或两个)类使用属性注入: Cyclic dependency with ninject
public class NotificationService: INotificationService{
ILogService LogService { set; }
}
public class LogService: ILogService{
private INotificationService _notificationService;
public LogService(INotificationService notificationService){
{
notificationService.LogService = this;
}
}