解决循环引用(C#)

Ale*_*lex 4 c# circular-reference

我在循环参考/依赖方面遇到了一些问题,我一整天都在这里.我的思维过程肯定有问题,我只是不明白.

这是我的项目:

Flip.Main     (ASP.NET MVC)
Flip.Domain   (C# DLL)
Flip.Services (C# DLL)
Flip.Utility  (C# DLL)
Run Code Online (Sandbox Code Playgroud)

Flip.Main ->     Flip.Domain, Flip.Services, Flip.Utility
Flip.Services -> Flip.Domain, Flip.Utility
Flip.Domain ->   Flip.Utility
Run Code Online (Sandbox Code Playgroud)

Flip.Main     (ASP.NET MVC)
Flip.Domain   (C# DLL)
Flip.Services (C# DLL)
Flip.Utility  (C# DLL)
Run Code Online (Sandbox Code Playgroud)

我想以我的服务项目拥有所有服务的方式构建我的项目,我的域项目模型,存储库和'流利'扩展来查询模型,主要和实用程序项目几乎是自我解释.

遇到的问题:

1)我的Flip.Services项目中有一个EmailService,需要发送本地化的电子邮件.所有本地化都在Flip.Main的App_GlobalResources中完成.不知道如何将强类型电子邮件和其他本地化资源现在提供给我的服务层,因为Flip.Main已经依赖于服务层,因此我可以让它依赖于Main项目.

2)我有业务类,例如CustomerSearchFilter,它代表强类型搜索查询.我想在Flip.Domain项目之外的那些业务类,因为它们不是域模型的一部分.但是,在我的CustomerSearchFilter类中,我有域类实例(例如CustomerGroup),因此需要了解域类.同时我的Flip.Domain项目中的Fluent接口需要知道CustomerSearchFilter是什么,所以我可以将它应用到我的IQueryable接口.再次循环引用.

3)我有一个自定义[AuthorizeSessionState]属性,我用它来装饰我的ASP.NET MVC Flip.Main项目中的特定控制器操作.这是一个ActionFilterAttribute,需要实例化驻留在Flip.Services项目中的SessionService.我不能把它放到我的Utility类中(因为Flip.Services已经引用了Flip.Utility).我不认为他们应该在Flip.Main中 - 我是否必须为此制作另一个项目!?

(另外20个)

我觉得我在某个地方犯了一个错误,特别是当我读到别人通常不会遇到循环引用问题时.救命?

ima*_*ima 5

为所有非平凡的类使用接口.将接口放在与实现不同的程序集中.

  • 这就是我要为第2项建议的内容.如果您觉得两个兄弟程序集需要知道彼此的类,只需拆分一个接口并让它们都使用它. (2认同)