C#webAPi项目中的循环引用问题

时间:2016-11-24 10:09:50

标签: c# reference circular-reference

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

在上图中,项目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? 但答案不是很明确是否正确。 有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这可能是一些工作,但修复方法是将 Repository 移动到新的ProjectRepo

然后让ProjectAProjectB都引用ProjectRepo,然后ProjectA也可以引用ProjectB而不需要B。

答案 1 :(得分:0)

据我所知,你在这里展示的不是循环参考。您无法按照图表上的箭头绘制圆圈。

如果存储库类在Project A Services上,那么您有一个循环引用,但是没有在问题上绘制。如果是这种情况,请记住这一点,将存储库移到项目A之外。