在另一个类中使用参数化构造函数

时间:2018-08-07 07:06:18

标签: c# asp.net oop model-view-controller dependency-injection

我有一个带有注入依赖项的构造函数类:

FuncTwo

我想要的是在另一个类中使用“ public class Facade : IFacade { private readonly IService _Service; private readonly IServices _Services; public Facade(IService Service) { _Service = Service; } } ”类构造函数,我知道下面的使用方式...但是我想摆脱“ Facade”这个东西    在传递参数(即new时)。如何使用参数化构造函数进行网上冲浪,但没有取得丰硕的成果。

new Service(config)

1 个答案:

答案 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工厂。