我有一对夫妇与循环引用/依赖,我已经坐在了一整天的问题。我的思考过程中一定是错的,我只是不明白。解决循环引用(C#)
这里是我的项目:
Flip.Main (ASP.NET MVC)
Flip.Domain (C# DLL)
Flip.Services (C# DLL)
Flip.Utility (C# DLL)
基准电流/依赖性:
Flip.Main -> Flip.Domain, Flip.Services, Flip.Utility
Flip.Services -> Flip.Domain, Flip.Utility
Flip.Domain -> Flip.Utility
我要组织我的项目,我的服务项目有所有服务的方式,我的领域的项目模型,资料库和'流利'扩展来查询模型,主要和实用工程几乎是自我解释。遇到
问题:
1)我有我的Flip.Services项目,该项目需要派出本地化电子邮件的EmailService。所有本地化都在Flip.Main的App_GlobalResources中完成。不知道如何将强类型电子邮件和其他本地化资源现在加入到我的服务层,因为Flip.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以上)
我觉得我犯了一个错误的地方的路线,尤其是当我看到别人通常不会遇到循环引用的问题。帮帮我?
这就是我要为第2项提出的建议。如果您觉得两个兄弟组件需要知道对方的类,只需分开一个接口并让它们都使用它们即可。 – 2009-08-24 06:36:59
您可以考虑的一件事是使用基本类型与虚拟成员而不是接口。通过这种方式,您可以为主机应用程序提供功能性的默认实现,这可以使测试变得更简单,并与实现共享一些逻辑。 – mcintyre321 2013-06-27 10:41:26