我有一個服務程序集與多個服務類。每個班級分組一組相關的服務方法。這些服務使用IoC和構造函數注入器實例化。避免循環引用服務和DI
如果我有兩個服務類有時需要在另一箇中調用方法,那麼爲了避免循環引用,處理這些方法的最佳方法是什麼?
例如,假設從兩個不同的服務類兩種服務方法(不一定是最實際的例子,但爲了簡單起見):
public class UserService
{
public void RegisterUser(User user)
{
// Do a bunch of stuff needed to register a user
// Now call out to permission service to set up basic permissions
_permissionService.SetUpBasicPermissions(user);
}
}
public class PermissionService
{
public void GrantPermission(User user, int PermissionId)
{
// Add user permission to database
// Now call out to user service to do some other stuff on the user
_userService.TakeActionsOnUserAccount(user);
}
}
這裏是選擇我可以看到:
考慮到需要在這兩者之間共享功能,這是服務類應該合併到一個類中的一個標誌。但是,如果是這種情況,我最終是否會得到一個巨大的服務類?什麼決定了他們應該如何分手?
不要合併這兩個類,而是將共享邏輯的方法移動到它們自己的服務類中(將用戶和權限特定的邏輯留在其各自的類中)。如果是這種情況,我可能會得到幾個這樣的共享服務,我認爲這不是一件好事。
從一個服務到另一個服務所需的任何操作都應該移到調用代碼中。這對我來說似乎有問題,因爲我將刪除潛在的依賴邏輯,並使其成爲另一層的關注點。換句話說,在我調用_userService.RegisterUser()的地方,我現在總是必須在每次調用之後立即調用_permissionService.SetUpBasicPermissions()。
允許一個服務調用另一個服務,但不能同時調用其他服務。如果是這種情況,我選擇哪一個?我該怎麼做w /那個不能打另一個的邏輯呢?
使用委託將相關服務方法注入到被調用的服務方法中。 Bleh,這聽起來很難看。
這些是我能想到的,但我確信有一些我可以忽略。
想法?
在此先感謝。
相關:http://stackoverflow.com/questions/1453128/is-there-a-good-proper-way-of-solving-the-dependency-injection-loop-problem-in-th – 2011-04-15 05:35:06
相關:http ://stackoverflow.com/questions/2608875/bad-design-constructor-of-composition-uses-this – 2011-04-15 05:35:27
相關:http://stackoverflow.com/questions/1356304/are-circular-class-dependencies-bad-from -a-coding-style-point-of-view – 2011-04-15 05:35:59