2015-03-24 13 views
1

Используя Ninject, я в состоянии создать абстрактную фабрику, используя следующий синтаксис из корня состава приложения:Есть ли у IOS ServiceStack по умолчанию что-то похожее на метод .ToFactory() ninject?

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

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

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

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

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

ответ

2

Насколько я мог судить, ServiceStack's Funq IoC implementation не включает в себя эту абстрактную реализацию завода, например Ninject's Abstract Factory support (или Castle Windsor's 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 добавил некоторые функции, но в основном это связано с регистрацией autwiring.

Если вы не можете создать конкретную реализацию для своих заводов, this other SO answer may show you how to do it yourself.