Имеет ли IoC по умолчанию ServiceStack что-то похожее на метод.ToFactory() от ninject?

Используя ninject, я могу создать абстрактную фабрику, используя следующий синтаксис из корня композиции приложения:

kernel.Bind<IBarFactory>().ToFactory();

Имеет ли контейнер IoC по умолчанию ServiceStack аналогичную функциональность? Я хотел бы реализовать абстрактную фабрику в одном из моих классов обслуживания, чтобы создавать репозитории по мере необходимости.

Одно предложение, которое я слышал, было использовать:

HostContext.Container.Resolve<[InsertDependancyHere]>()

но я бы хотел избежать создания доступа к контейнеру вне корневого каталога композиции (файл Apphost.cs).

1 ответ

Решение

Насколько я могу судить, реализация Funq IoC в ServiceStack не включает в себя эту реализацию Abstract Factory, такую ​​как поддержка Abstract Factory в Ninject (или средство Typed Factory Facility Касла Виндзора, которое я использовал).

Вы по-прежнему можете избежать анти-паттерна Service Locator, создав конкретную реализацию Factory и внедрив ее в свои классы.

   public class BarFactory : IBarFactory
   {
       // constructor inject dependencies to the factory - no service locator
       public BarFactory() { ... }

       // create objects from factory
       public IBar GetBar() { ... }
   }

Другие ваши классы могут внедрять IBarFactory и вызывать его напрямую.

По своей конструкции Func не имеет ничего общего с другими функциями. В ServiceStack добавлены некоторые функции, но в основном это связано с автоматической регистрацией проводки.

Если вы не можете создать конкретную реализацию для своих фабрик, этот другой ответ SO может показать вам, как это сделать самостоятельно.

Другие вопросы по тегам