Основная причина, по которой вам не следует этого делать, заключается в том, что вы запускаете управление жизненным циклом COM для экземпляра объекта, который ему не нужен. Теперь .NET нужно будет выполнить некоторое COM-взаимодействие, которое включает в себя обход стека безопасности, проверки потоков в квартирах и утилиты addref / release.
Вместо этого я хотел бы рассмотреть вопрос о внедрении зависимостей (инверсия шаблона управления) и шаблон общего локатора обслуживания. Я бы сосредоточился на понимании внедрения в конструктор, так как это предпочтительный шаблон для управления зависимостями.
Вот что я делаю в своих библиотеках. Допустим, я хочу написать сервис регистрации (надуманный пример). У меня было бы два основных компонента:
MyStuff.Logging.Contracts - здесь я бы объявил интерфейс ILogger
MyStuff.Logging - здесь я бы написал различные реализации журналирования, которые могут быть у меня, такие как FileLogger, DatabaseLogger и т. Д.
Тогда в моем приложении я бы использовал Ninject или Unity (контейнеры DI), чтобы связать ILogger с реализацией по умолчанию.