ServiceStack的默认IoC是否与ninject的类似.ToFactory()方法?

时间:2015-03-24 17:58:15

标签: servicestack abstract-factory funq

使用ninject,我可以使用应用程序组合根中的以下语法创建一个抽象工厂:

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

ServiceStack的默认IoC容器是否具有类似的功能?我想在我的一个服务类中实现一个抽象工厂,以便根据需要创建存储库。

我听说过的一个建议就是使用:

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

但是我想避免在组合根(Apphost.cs文件)之外创建对容器的访问。

1 个答案:

答案 0 :(得分:2)

据我所知,ServiceStack's Funq IoC implementation不包含此抽象工厂实现,例如Ninject's Abstract Factory support(或Castle Windsor's Typed Factory Facility,我曾经使用过)。

您仍然可以通过创建具体的Factory实现并将其注入您的类来避免Service Locator反模式。

   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添加了一些功能,但主要与自动装配注册有关。

如果您无法为工厂创建具体的实施,this other SO answer may show you how to do it yourself