RegisterType与Unity

时间:2012-02-15 20:58:02

标签: unity-container

我无法解决一个统一的类型。我有一个服用Uri和bool的服务。

Foo(Uri uri, bool bar)

当我尝试解决Foo Unity抱怨时

The type Uri has multiple constructors of length 2. Unable to disambiguate

我尝试过RegisterInstance,但无济于事。

我错过了什么?

2 个答案:

答案 0 :(得分:4)

如果你的类有多个带有两个参数的构造函数,你必须指定Unity应该使用哪一个。

如果您的构造函数接受字符串,bool或URI等原始参数,则您必须使用这些参数注册映射,或者在解析时提供它们。

container.RegisterType<Foo>(new InjectionConstructor(new Uri("http://bla.com"), false));

Foo foo = container.Resolve<Foo>(new ParameterOverride("uri", new Uri("...")), new ParameterOverride("bar", false)));

应该有效。虽然我不推荐第二种方法。不应以这种方式使用DI容器。

答案 1 :(得分:2)

Unity初始化wcf客户端时出现相同的错误消息。因为我在我的配置中设置Unity,解决方案是 <register xxx> <constructor></constructor> </register> 明确地调用没有参数的构造函数。