昨日、コードを実装しました:
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 しかし、それは「バグではない」として解決されます
どんな考えでも役に立ちます
同じ問題があり、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です。
MicrosoftはもはやUnityを所有しておらず、バージョン5になりました。名前空間は次のとおりです。
using Unity;
以下を使用する場合、使用セクションにあることを確認します。
container.Resolve<T>();
私はこの問題に直面しました、そして、この答えのどれも私を助けませんでした。コンパイル時エラーが発生しました
Microsoft.Practices.Unity.IUnityContainerの不明なメソッドRegisterType()
私の以下のコードのために。
Container.RegisterType<MyInterface, MyClass>();
クラスIMyInterface
にMyClass
を実装しないと、この問題が発生することがわかりました。それもあなたのために解決することを願っています...
私の状況では、汎用バージョンなしでBootstrapperに独自のResolveを実装させたため、MicrosoftのUnity Resolveが見つかりませんでした。適切な使用法を追加することでうまくいきました。
私の状況では、Unityでラップするクラスは抽象基本クラスから継承され、その基本クラスは[〜#〜] not [〜#〜]にパラメーターなしのコンストラクターを持ちました。基本クラスにパラメーターなしのコンストラクターを使用するようにコードを変更すると、問題はなくなりました。