我有一个C#web api项目,其架构如下图所示(ProjectA)
在上图中,项目A中的控制器使用项目A的服务来执行实际作业,而服务使用存储库来读取和写入数据库。 他们都使用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服务调用,将执行某些操作然后将使用ProjectA的存储库模式并保存数据D B。 问题是这个设计导致循环引用,并且2个项目不会编译。 这里有一个类似的问题How to solve circular reference? 但答案不是很明确是否正确。 有什么想法吗?
答案 0 :(得分:2)
这可能是一些工作,但修复方法是将 Repository
移动到新的ProjectRepo
。
然后让ProjectA
和ProjectB
都引用ProjectRepo
,然后ProjectA
也可以引用ProjectB
而不需要B。
答案 1 :(得分:0)
据我所知,你在这里展示的不是循环参考。您无法按照图表上的箭头绘制圆圈。
如果存储库类在Project A Services上,那么您有一个循环引用,但是没有在问题上绘制。如果是这种情况,请记住这一点,将存储库移到项目A之外。