0

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

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

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

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

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

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

4

1 回答 1

2

据我所知,ServiceStack 的 Funq IoC 实现不包括这个抽象工厂实现,例如Ninject 的抽象工厂支持(或Castle Windsor 的 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 添加了一些功能,但主要与自动装配注册有关。

如果你不能为你的工厂创建一个具体的实现,这个另一个 SO 答案可能会告诉你如何自己做

于 2015-03-24T19:33:56.273 回答