web-dev-qa-db-ja.com

IUnityContainer.Resolve <T>は、型パラメーターで使用できないというエラーをスローします

昨日、コードを実装しました:

CustomerProductManager productsManager = container.Resolve<CustomerProductManager>();

コンパイル可能で機能していました。

今日(おそらく何かを変更した)私は常にエラーを取得しています:

非ジェネリックメソッド 'Microsoft.Practices.Unity.IUnityContainer.Resolve(System.Type、string、params Microsoft.Practices.Unity.ResolverOverride [])'は型引数と共に使用できません

私の同僚には同じソースコードがあり、同じエラーはありません。どうして?問題を解決するには?

追伸.

行「using Microsoft.Practices.Unity;」 usingsセクションに存在します。

ジェネリックバージョンを非ジェネリックバージョンに置き換えようとしました。

CustomerProductManager productsManager = (CustomerProductManager)container.Resolve(typeof(CustomerProductManager));

そして別のエラーが発生しました:

メソッド「Resolve」のオーバーロードは「1」引数を取りません

アセンブリの1つが参照されていないようです。私はそれらの2つを参照しています:1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll

P.P.S.私は同様の問題を見ました http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205 しかし、それは「バグではない」として解決されます

どんな考えでも役に立ちます

74
Budda

同じ問題があり、Prismサンプルコードファイルを見ると「修正」が見つかりました。 Unity V2のdllでなくても、クラスに参照を追加する必要があります:Microsoft.Practices.Unity

私の完全な「使用」セクションは次のとおりです

using System;
using System.Windows;
using Microsoft.Practices.Composite.Modularity;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Composite.UnityExtensions;

Silverlightを使用しているかどうかはわかりませんが、Container.Resolveの汎用バージョン[〜#〜] is [〜#〜]はMicrosoft.Practices.Unityです。

173
rodrigo

MicrosoftはもはやUnityを所有しておらず、バージョン5になりました。名前空間は次のとおりです。

using Unity;

以下を使用する場合、使用セクションにあることを確認します。

container.Resolve<T>();
33
RandomUs1r

私はこの問題に直面しました、そして、この答えのどれも私を助けませんでした。コンパイル時エラーが発生しました

Microsoft.Practices.Unity.IUnityContainerの不明なメソッドRegisterType()

私の以下のコードのために。

Container.RegisterType<MyInterface, MyClass>();

クラスIMyInterfaceMyClassを実装しないと、この問題が発生することがわかりました。それもあなたのために解決することを願っています...

1
Ranjith

私の状況では、汎用バージョンなしでBootstrapperに独自のResolveを実装させたため、MicrosoftのUnity Resolveが見つかりませんでした。適切な使用法を追加することでうまくいきました。

0
PmanAce

私の状況では、Unityでラップするクラスは抽象基本クラスから継承され、その基本クラスは[〜#〜] not [〜#〜]にパラメーターなしのコンストラクターを持ちました。基本クラスにパラメーターなしのコンストラクターを使用するようにコードを変更すると、問題はなくなりました。

0
Peter Howe