我有一个服务程序集与多个服务类。每个班级分组一组相关的服务方法。这些服务使用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