我有一个带有注入依赖项的构造函数类:
FuncTwo
我想要的是在另一个类中使用“ public class Facade : IFacade
{
private readonly IService _Service;
private readonly IServices _Services;
public Facade(IService Service)
{
_Service = Service;
}
}
”类构造函数,我知道下面的使用方式...但是我想摆脱“ Facade
”这个东西
在传递参数(即new
时)。如何使用参数化构造函数进行网上冲浪,但没有取得丰硕的成果。
new Service(config)
答案 0 :(得分:0)
您应该避免将ctor参数与“依赖注入”结合使用。如果您有多个使用不同配置的服务,最好是使用名称使用不同的配置多次注册它,然后再解析所需的一个。
以下是使用Unity的示例:
var someConfig = new ServiceUrl();
var otherConfig = new ServiceUrl();
container.RegisterType<Facade>("someFacade", new InjectionConstructor(someConfig));
container.RegisterType<Facade>("otherFacade", new InjectionConstructor(otherConfig));
然后您可以在注册期间解析所需的Facade
:
container.Register<SomeClassTakingFacadeAsArgument>(
new InjectionConstructor(
new ResolvedParameter<Facade>("someFacade"));
container.Register<OtherClassTakingFacadeAsArgument>(
new InjectionConstructor(
new ResolvedParameter<Facade>("otherFacade"));
或手动解决:
var someFacade = container.Resolve<Facade>("someFacade");
var otherFacade = container.Resolve<Facade>("otherFacade");
您应该能够在任何流行的IoC容器中实现这一目标。
如果您100%确定需要将config作为参数传递,并且不想进行多次注册,则建议创建一个Service
工厂。