Использование Extensions Methods для создания экземпляра класса

С момента появления C#3.0 нашлось достаточно много интересных применений extensions method'ам. Различных вариаций на эту тему достаточно большое множество, и в этом посте мне бы хотелось дополнить эту копилку еще одним таким примером.

Дело в том, что в силу специфики своего проекта мне достаточно часто приходится инстанциировать объекты основываясь на строковом имени класса (знаем строку, в которой задано имя класса => получаем экземпляр этого класса). Конечно, каждый из вас знает что делается это, например, при помощи объекта Activator. Например так:

object o = Activator.CreateInstance(Type.GetType(@"WindowsFormsApplication1.Class1", false));

Однако, если поиграться с extensions method'ами, то можно сделать следующее.

Определим extension method:

public static class InstanceExtension
{
  public static object CreateInstance(this string type)
  {
    return Activator.CreateInstance(Type.GetType(type, false));
  }
}

Теперь воспользуемся им:

object o = "WindowsFormsApplication1.Class1".CreateInstance();

Помоему выглядит достаточно интересно. Если пример немного усложнить и добавить какую-либо логику в реализацию extension method (например, инжектирование через DI в новоиспеченный инстанс какого-либо объекта, если он реализует заданный контракт, итд), то толк из этого может вполне получится.