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。
使用 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。