Один из способов разрешения круговой зависимости - создать слой между двумя сборками:
Вместо этого сценария;
Модель сборки:
public class Customer{
//...
}
Данные сборки:
public class CustomerDAO{
public Customer LoadCustomer(int id){
return new Customer(id,...);
}
}
, где сборка модели ссылается на сборку данных, а данные не могут вернуться обратно в модель для создания экземпляра клиента.
Вместо этого вы можете иметь;
Модель сборки:
public class CustomerModel:Customer{}
public class ModelFactoryImp:ModelFactory{
public Customer CreateCustomer(int id,//...customer params){
return new CustomerModel(...);
}
}
Интерфейсы модели сборки:
public abstract class Customer{//...}
public abstract ModelFactory{
Customer CreateCustomer(int id,//...customer params);
}
Данные сборки:
public class CustomerDAO{
private ModelFactory _modelFactory;
public CustomerDAO(ModelFactory modelFactory){
_modelFactory = modelFactory;
}
public Customer LoadCustomer(int id)
{
// Data Access Code
return _modelFactory.CreateCustomer(id,//...cutomer params);
}
}
Где сборки Модель и Данные зависят от слоя ModelInterfaces ивы передаете объекту доступа к данным клиента реализацию класса ModelFactory, чтобы он мог создавать клиентов.