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

Does ServiceStack's default IoC have something similar to ninject's .ToFactory() Method?

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

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

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

我听到的一个建议是使用:

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

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

据我所知,ServiceStack's Funq IoC implementation does not include this Abstract Factory implementation, like Ninject's Abstract Factory support (or Castle Windsor's Typed Factory Facility,我曾经使用过)。

您仍然可以通过创建一个具体的工厂实现并将其注入您的 类 来避免服务定位器反模式。

   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