title: What's the recommended folder structure of catalogs in project using IoC
body: <p>I've read few articles and watched many lectures/tutorials on YT about DI and IoC, but I didn't find any recommended layout of catalogs in VS solution. </p>
  
  <p>I'm talking about the project (a game for example) where you have few classes/interfaces, logger, database provider, wcf services, wpf presentation layer (that's actually different project)...</p>
  
  <p>Is there any pattern project, that shows how should I organize my project, so next, experienced programmer will not waste time figuring out what's going on? Like we're talking about "self commented code", I'm talking about "self commented project structure".  </p>
  
  <p>For example, should I put all interfaces into "Interfaces" catalog? Or should I (in case of logger) create "Logger" catalog and put there interface, classes, class with extension methods (all, focused on logging). Code focused on Board, in "Board" catalog. Separate catalog for "Field" etc etc.. </p>
  
  <p>Right now the structure looks like that. I'm not sure about "Business" there and Logger. I have interface in different catalog then other logger classes. Should I call Log4Net provider? or adapter? or decorator? It's just a logger class implementing <code>ILogger</code> interface. Here is the screen: <a href="https://www.imageupload.co.uk/images/2015/09/07/ScreenShot2015-09-08at00.56.03.png" rel="noreferrer">link</a></p>
  
  <p>Here is the sample code (there is no IoC yet, but everybody will notice there will be 3 interfaces there mapped. Very simple):</p>
  
  <pre><code>public class Game
  {
      public IBoard Board { get; set; }
  
      public Game(IBoard board)
      {
          Board = board;
      }
  }
  
  public interface IBoard {}
  
  public class Board : IBoard
  {
      public IField[,] Fields { get; set; }
      public Board(IField field, int boardWidth, int boardHeight)
      {
          Fields = new IField[boardHeight, boardWidth];
          Fields.Initialize();
      }
  }
  
  public interface IField {}
  
  public class Field : IField {}
  
  public interface ILogger
  {
      void Log(LogEntry entry);
  }
  </code></pre>