title: Factory pattern in C#: How to ensure an object instance can only be created by a factory class?
body: <p>Recently I've been thinking about securing some of my code. I'm curious how one could make sure an object can never be created directly, but only via some method of a factory class. Let us say I have some "business object" class and I want to make sure any instance of this class will have a valid internal state. In order to achieve this I will need to perform some check before creating an object, probably in its constructor. This is all okay until I decide I want to make this check be a part of the business logic. So, how can I arrange for a business object to be creatable only through some method in my business logic class but never directly? The first natural desire to use a good old "friend" keyword of C++ will fall short with C#. So we need other options...</p>
  
  <p>Let's try some example:</p>
  
  <pre><code>public MyBusinessObjectClass
  {
      public string MyProperty { get; private set; }
  
      public MyBusinessObjectClass (string myProperty)
      {
          MyProperty = myProperty;
      }
  }
  
  public MyBusinessLogicClass
  {
      public MyBusinessObjectClass CreateBusinessObject (string myProperty)
      {
          // Perform some check on myProperty
  
          if (true /* check is okay */)
              return new MyBusinessObjectClass (myProperty);
  
          return null;
      }
  }
  </code></pre>
  
  <p>It's all okay until you remember you can still create MyBusinessObjectClass instance directly, without checking the input. I would like to exclude that technical possibility altogether.</p>
  
  <p>So, what does the community think about this?</p>