Ich arbeite an einem Projekt mit einem komplexen Geschäft. Betrachte zwei Klassen: AccountService und SchoolServiceCircular Referenz zwischen den Diensten mit dem Anemic-Domain-Modell
Ich verwende Unity und den Abhängigkeits-Resolver der Web-API, um die Abhängigkeitsinjektion im Konstruktor zu implementieren.
Der Schuldienst verwendet den Kontodienst bei einigen Methoden, auch der Kontodienst verwendet den Schulservice. All dies ist im Geschäft des Projekts erforderlich. Dies führt zu einer zirkulären Abhängigkeit, und es ist nicht möglich, die Methoden von einer Klasse in eine andere zu verschieben.
Können Sie mir bitte eine Idee geben, wie Sie das lösen können? Hier
ein Beispiel:
public class SchoolBLC : ISchoolBLC
{
public School GetSchool(int schoolId)
{
...
}
public bool RenewRegistration(int accountId)
{
bool result = true;
IAccountBLC accountBLC = new AccountBLC();
// check some properties related to the account to decide if the account can be renewed
// ex : the account should not be 5 years old
// check the account created date and do renewal
return result;
}
}
public class AccountBLC : IAccountBLC
{
public void ResetAccount(int accountId)
{
ISchoolBLC schoolBLC = new SchoolBLC();
School accountSchool = schoolBLC
// get the school related to the account to send a notification
// and tell the school that the user has reset his account
// reset account and call the school notification service
}
public Account GetAccount(int accountId)
{
...
}
}
Die beiden Klassen einander verweisen, ist dies die Situation für 70% der BLCs im Projekt.
Können Sie ein Beispiel für eine solche zyklische Abhängigkeit in Ihrem Projekt angeben. – user1849310
Klingt wie ein armes Design ... Ich würde die üblichen Sachen zu einem 3. Dienst ausbrechen. Das wird die zirkuläre Abhängigkeit lösen. DI-Motoren werfen normalerweise eine Ausnahme auf einen kreisförmigen Bezug. – SledgeHammer
@SledgeHammer Mehr auf den Punkt. Wie würdest du das Problem auch ohne DI lösen? DI ist nicht magisch, wenn du es ohne es nicht kannst, kannst du es nicht damit machen. – Aron