I am working on an asp.net MVC web application which contains several projects.One is BusinessObjects, which contains business logic / processes.Another is EmailGeneration which is used to send marketing campaign / customer emails.The EmailGeneration project references the BusinessObjects project because it need to generate templated emails based on Business Objects.I need to be able to trigger emails from business objects so that I can, say, automatically send an invoice when an order is completed.However, I can't add the reference as it would create a circular reference. This suggests that my design is flawed.How can I change my design to reduce coupling between the components?
Overcoming circular reference
refactoring;asp.net;asp.net mvc 3;design;architecture
I agree that it sounds like your design is flawed in the fact that your business objects themselves need to send emails.  It sounds like this should be done in some sort of domain layer not the objects themselves?  Hard to say.  Alternatively you could look at creating another project that contains various interfaces for your business objects.  Then your dependencies would look like:Business.Objects => Business.Objects.Interfaces                 => Business.EmailBusiness.Email   => Business.Objects.InterfacesHowever as pointed out you will probably get more help on SO, or Programmers.