0

我有多个相同类型参数的构造函数的服务依赖关系SimpleInjector命名参数注册

class Service{ 
    public void Service (String connectionStringOne, string connectionStringTwo) 
    {} 
} 

我怎样才能做到在SimpleInjector容器此注册。 我假设我会使用RegisterConditional提供谓词。 例如

Container.RegisterConditional(typoef(string),"SQLConnectionString",Leftstyle.Singleton, pc => pc.ParameterName == "connectionStringOne") 
Container.RegisterConditional(typoef(string),"MDXConnectionStribng",Leftstyle.Singleton, pc => pc.ParameterName == "connectionStringTwo") 

然而PredicateContext不提供 'ParameteName'

+0

我不明白你的问题。你能详细说明吗? – Steven

+0

道歉我错过了。请参阅修订后的问题 –

+0

参数名称可以使用'c.Consumer.Target.Name'来检索,尽管我建议不要像这样使用RegisterConditional。查看我的答案,找到另一种方法。 – Steven

回答

0

您应该注册使用厂家代表为您服务:

container.Register<IService>(() => new Service("str1", "str2")); 
+0

如果不是硬编码的字符串,我有会话变量保存要传递的值或web.config? –

+0

@SimpleFellow这些是两种截然不同的用例。 web.config中的值是常量值;它们在应用程序生命周期中不会更改。您应该在启动过程中从配置中读取它们,并像给出的示例中那样传递它们。应用程序特定的抽象背后应该提取来自会话的值。如果您发布了一个关于您的案例的更多细节的新问题,我会尽力回答。 – Steven

+0

只要考虑一个具有需要字符串的构造函数的类的情况。所需的字符串驻留在会话变量中,对于每个用户,它将会不同。 (不同的会话/不同的字符串值/每个用户都有一个唯一的值)。在这种情况下做什么? –