title: IoC with value type and object type dependencies
body: <p>I am looking for suggestions as to the best way to design objects for IoC</p>
  
  <p>Suppose I have an object (Service) that has a dependency to a DataContext which is registered with Ioc.</p>
  
  <p>But it also requires a name property, i could design the object like this:</p>
  
  <pre><code>class Service
  {
      public Service(IDataContext dataContext, 
          string name)
      {
          this._dataContext = dataContext;
          this._name = name
      }
  
      public string Name
      {
          get
          {
              return _name;
          }
      }
  }
  </code></pre>
  
  <p>The problem is it becomes very complicated to use with Ioc containers as a string object such as name is not easy to register and the usage becomes complicated with the Ioc container:
  So resolution becomes confusing:</p>
  
  <pre><code>var service = Ioc.Resolve&lt;Service&gt;( ?? )
  </code></pre>
  
  <p>Another approach is to design it as follows:</p>
  
  <pre><code>class Service
  {
     public Service(IDataContext dataContext)
     {
          this._dataContext = dataContext;
     }
  
      public string Name { get; set; }
  } 
  </code></pre>
  
  <p>The resolution is now easier:</p>
  
  <pre><code>var service = Ioc.Resolve&lt;Service&gt;();
  service.Name = "Some name";
  </code></pre>
  
  <p>The only downsite is specifying the name is no longer required.
  I would like to hear from DI or IoC experts how they would go about designing this and still stay fairly agnostic to the concrete Ioc container technology.</p>
  
  <p>I know that a lot depends on how you want to use this, option 2 would be perfect if name really was optional. But in the case where name is required you could add the validation step at another point in code, but rather go for the design to make Ioc simpler.</p>
  
  <p>Thoughts?</p>