我有一个C# web api项目,其架构如下图(ProjectA)所示。

在上图中,项目A中的控制器使用项目A的服务来完成实际工作,服务使用Repository来读取和写入数据库。它们都使用Autofac依赖注入。示例:使用各种服务的Controller的构造函数
public DKMenuController(ITokenService tokenService, IUserService userservice, IDKMenuService dkMenuService)
{
_tokenService = tokenService;
_dkMenuService = dkMenuService;
_userservice = userservice;
}使用底层存储库与数据库进行通信的服务的构造函数
public DKMenuService(IRepository repository)
{
this._repository = repository;
}在应用程序启动时注册各种服务,如下所示
this.RegisterType<Repository>().As<IRepository>().InstancePerRequest();
this.RegisterType<DKMenuService>().As<IDKMenuService>().InstancePerRequest();现在我想添加另一个项目(在示例中命名为ProjectB),它只是一个类库,将从ProjectA服务中调用,将执行某些操作,然后将使用项目的存储库模式并将数据保存在数据库中。问题是这种设计会导致循环引用,两个项目无法编译。这里有一个类似的问题,How to solve circular reference?,但答案是否正确还不是很清楚。有什么想法吗?
发布于 2016-11-24 18:23:09
这可能会有一些工作,但修复方法是将Repository移动到新的ProjectRepo中。
然后让ProjectA和ProjectB都引用ProjectRepo,然后ProjectA也可以引用ProjectB,而B不需要A。
发布于 2016-11-24 18:11:37
据我所知,您在这里显示的不是循环引用。您不能沿着图表上的箭头绘制圆圈。
如果存储库类在Project A Services上,那么您有一个循环引用,但这不是在问题上绘制的。记住这一点,如果是这样的话,将存储库移到项目A之外。
https://stackoverflow.com/questions/40783461
复制相似问题