使用ninject,我可以使用应用程序组合根中的以下语法创建一个抽象工厂:
kernel.Bind<IBarFactory>().ToFactory();
ServiceStack的默认IoC容器是否具有类似的功能?我想在我的一个服务类中实现一个抽象工厂,以便根据需要创建存储库。
我听说过的一个建议就是使用:
HostContext.Container.Resolve<[InsertDependancyHere]>()
但是我想避免在组合根(Apphost.cs文件)之外创建对容器的访问。
答案 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。