TL; DR使用容器将运行时参数传递给构造函数是否是一种不好的做法?
作为一个例子,我正在构建一个WCF解决方案,其中包含使用ServiceHostFactoryBase
实现动态构建的服务主机。这个工厂是我的Composition Root;它访问Unity,设置它并使用容器来解析ServiceHost
。但是,此ServiceHost需要访问数据库中的某些配置,并使用“constructorString”来标识此配置。
由于Unity是创建我的ServiceHost
实例的人,因此除了通过ParameterOverride
传递参数外,我没有看到任何其他解决方案。 但我不喜欢它。该参数不是依赖项,它是在运行时找到的参数。 此外,ServiceHost
依赖于另一个也需要“constructorString”的类。所以我将依靠Unity传递它。
我使用Unity 3作为我的IoC容器。
答案 0 :(得分:1)
将运行时参数传递给a是否被视为不好的做法 构造函数使用容器?
是的。规则是使用方法调用使用构造函数和运行时依赖项注入编译时依赖项。
'编译时依赖项'是在编译时或配置时(系统启动并且使用容器连接依赖项时)已知的值。这允许容器为您构建对象图。