2012-02-15 11 views
1

1つのタイプの解決に問題があります。私はウリとブールを取るサービスを持っています。ユニティのレジスタタイプ

Foo(Uri uri, bool bar) 

私が試してみてはFoo Unityは私がRegisterInstanceになく、無駄にしようとした

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

を文句解決します。

私には何が欠けていますか?

答えて

4

クラスに2つの引数を取るコンストラクタが複数ある場合は、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))); 

動作するはずです。 2番目のアプローチはお勧めしませんが。 DIコンテナはそのように使用すべきではありません。

2

Unityによってwcfクライアントを初期化するときに同じエラーメッセージが表示されました。私の設定でUnityを設定しているので、解決策はパラメータなしでコンストラクタを呼び出すために <register xxx> <constructor></constructor> </register> です。