Изучаю внедрение зависимостей, появился вопрос. Может ли быть такое что два класса зависят друг от друга как в примере ниже. (Внедрение через конструктор)
Можно так делать?
public class AService {
private BService _bService;
public A(BService bService) {
_bService = bService;
}
public void DoA1() {
//зависимость не используется
}
public void DoA2() {
//зависимость используется, нужны методы DoB1 b DoB2
if(condition) _bService.DoB1() else _bService.DoB2();
}
}
public class BService {
private AService _aService;
public BService(AService aService) {
_aService = aService;
}
public void DoB1() {
//зависимость не используется
}
public void DoB2() {
//для метода B нужен только результат метода DoA1()
_aService.DoA1();
}
}
На яве можно сделать так, на шарпе аналогично, используя функциональные интерфейсы:
class AService{
public AService(){}
public void DoA1() {
System.out.println("aserv");
//зависимость не используется
}
}
class BService{
public BService() {
}
public void DoB1() {
System.out.println("bser");
//зависимость не используется
}
}
@FunctionalInterface
interface IService {
void doClass();
}
class ServiceImpl {
public static void doClass(IService iService) {
iService.doClass();
}
}
public class Main{
public static void main(String[] args) {
BService bService = new BService();
ServiceImpl.doClass(bService::DoB1);//()->{//здесь ваша логика}
}
}
Если с условиями:
BService bService = new BService();
AService aService = new AService();
ServiceImpl.doClass(()->{
if(false){
bService.DoB1();
}else {
aService.DoA1();
}
});
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как в MindDecider в скрипте подключить свою библиотеку dll?