問題タブ [common-service-locator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2892 参照

c# - IServiceLocator.GetInstance(Type) の意図は、IServiceProvider.GetService(Type) の意図とどのように異なりますか?

IServiceProvider.GetService(Type serviceType)メソッド署名との意図に違いはありIServiceLocator.GetInstance(Type serviceType)ますか? もしそうなら、違いは何ですか?

私は常にそれらを同等のものとして扱ってきましたが、一貫性を保つために単一の方法を使用することにしました。これは 2 つのインターフェイスを扱うのに十分な解決策のように思えますが、正しい場所で正しいものを使用していることを確認できるように、それらの使用法が実際にどのように意図されていたかを知りたいと思っています。 それらの意図が実際に同じである場合、同じ目的のために複数のセマンティクスのセットを持つ理由はありますか? (の開始時に署名が推奨されていたことは理解してGetInstanceMicrosoft.Practices.ServiceLocationますが、これは重複を導入する正当な理由とは思えません)。

なぜ私は混乱しています

以下は、この質問に対する答えを見つけようとして見つけた矛盾する事実と、それに対する私の解釈のリストです。これらを含めているのは、このトピックについて既に知られているすべての情報のコンテキストで私の質問に対処できるようにするためです.

  • MSDNドキュメントにIServiceProviderは、GetService(Type serviceType)メソッドが返す必要があると書かれています

    タイプserviceType のサービス オブジェクト。
    - または - serviceType型のサービス オブジェクトがない場合は
    null
  • MSDN ドキュメントにIServiceLocatorはメソッドのドキュメントがありませんが、VS オブジェクト ブラウザの概要にはGetInstance(Type serviceType)、メソッドが「要求されたサービス インスタンス」を返すと記載されています。ただし、ドキュメントIServiceLocatorには、サービス インスタンスの解決中にエラーが発生した場合に をスローするActivationException必要があるという例外エントリもあります。

  • ActivationExceptionが導入されてから数年後に導入されたMicrosoft.Practices.ServiceLocation名前空間にありますIServiceProviderIServiceProviderしたがって、が例外を参照していないことは理解できます。そうは言っても、IServiceLocatorインターフェイスのドキュメントにはnull、結果が見つからない場合に戻ることについては何も書かれていません。また、要求されたサービス タイプの実装の欠如が例外を構成する必要があるかどうかも明らかではありません。

  • サービス タイプの実装がない場合、ActivationExceptioninIServiceLocator実装が発生する必要がありますか? それのようには見えません。の実装テンプレートIServiceLocatorは、null 以外の事後条件の概念 を無視します。

  • 実装テンプレートも、 の代替構文としてIServiceLocator扱います。これは Liskov の違反 (基本型で宣言されていないサブタイプで例外をスローするため) と見なされますか? それとも、インターフェイスのメソッド シグネチャで宣言された例外ではなく、実際に実装に違いが必要でしょうか? 私が得ているのは、実装テンプレートが両方のインターフェースを正しく実装していると確信していますか? 呼び出しを try ブロックでラップし、例外がキャッチされたときに戻る というインターフェイスの意図をより適切に表現できますか?IServiceProvider.GetService(Type)IServiceLocator.GetInstance()ServiceLocatorImplBaseIServiceLocatorIServiceProviderGetInstancenull

  • 補遺:これに関連するもう 1 つの問題は、への対応IServiceLocator.GetAllInstances(Type)ですIServiceLocator.GetInstance(Type)。具体的には、任意の型 T について、 の実装はIServiceLocator.GetAllInstances(typeof(T))と同じ結果を返す必要がありIServiceLocator.GetInstance(typeof(IEnumerable<>).MakeGenericType(typeof(T))ますか? (これがIServiceProvider通信にどのように関係しているかは簡単にわかりますが、質問を単純にして、この場合は同じインターフェースの 2 つのメソッドのみを比較する方がよいと思います。)

0 投票する
3 に答える
660 参照

visual-studio - パッケージが NuGet マネージャーの [更新プログラム] に表示され、削除できません

これは私がかなり長い間抱えていた問題ですが、このプロジェクトを仕事で締めくくっているので、ようやく解決できるかもしれないと思っていました. NuGet パッケージの更新を確認すると、リストには常にこれが表示されます (+ 実際に利用可能な更新)。 NuGet パッケージ マネージャーの更新

更新をクリックすると、次の画面が表示されます。 アップデート

チェックボックスを選択できません。ご覧のとおり、デフォルトではチェックされていません。これは、プロジェクトにこのパッケージがインストールされていないことを意味します。[OK] をクリックしても [キャンセル] をクリックしても、常に最初のスクリーンショットに戻ります。スクリーンショット 3 でわかるように、パッケージはインストール済みリストにも表示されていません。 ここに画像の説明を入力

packages.config ファイルにもありません。Uninstall-Package CommonServiceLocator を書くと、次のようになります。

PM> Uninstall-Package CommonServiceLocator Uninstall-Package : Unable to find 'CommonServiceLocator' in 'ManagementSystem' and found multiple versions of 'CommonServiceLocator' installed. Please specify a version. At line:1 char:18 + Uninstall-Package <<<< CommonServiceLocator + CategoryInfo : NotSpecified: (:) [Uninstall-Package], InvalidOperationException + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.UninstallPackageCommand

インストールされていないため、バージョンを指定できません。パッケージをpackages.configファイルに手動で追加してから、インストール済みリストからアンインストールすることさえ試みました。次に、NuGet マネージャーでインストールとアンインストールを試みました。まだ同じ。これはあなたに起こったことがありますか?どのように解決しましたか (プロジェクト全体の再作成を除く)? ありがとう!

0 投票する
1 に答える
571 参照

mvvm-light - プロジェクトが System.ComponentModel アセンブリを参照できないのはなぜですか?

私のプロジェクトは .NET Framework 4.5 に設定されています。WPF プロジェクトで SimpleIOC (MVVM Light から) を使用しようとすると、次のエラーが発生します。

Error 3 Reference required to assembly 'System.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' containing the implemented interface 'System.IServiceProvider'. Add one to your project.

なぜこのエラーが発生するのかわかりません。私が理解していることから、これは mscorlib クラスなので、どこから System.ComponentModel を取得しているのかわかりません。

Dim test As IServiceProviderコンパイラが文句を言うことなく書くことができます。何らかのバージョンの問題がありますか?

0 投票する
1 に答える
1288 参照

xamarin - MvvmLight の SimpleIoc は、Xamarin Forms 1.3 Android および iOS アプリでは機能しませんが、Windows Phone では機能しません

私は Xamarin Forms アプリに取り組んでおり、Windows Phone のビルドと実行はすべて順調に進んでいます。ただし、Android バージョンを実行しようとすると、正常にビルドされてから失敗し、ViewModelLocator で ViewModel を解決するために ServiceLocator を呼び出すときに例外が発生します。

ViewModelLocator の改行

「GetInstance」ショーにカーソルを合わせます

私のViewModelの唯一のコンストラクタは次のようになります

すべての依存関係は、ViewModelLocatorたとえば、これに先立って登録されます

MainActivity.cs (Android) および AppDelegate(iOS) などのプラットフォーム固有のものもあります。

私が得られないのは、Windows Phone で美しく動作するということですか? Android との違いは何ですか? Xamarin 1.3 以降で SimpleIoc を使用した人はいますか?

ビューモデルを作成するためにファクトリを使用する必要がありますか?

どんな助けでも大歓迎です。MVVMLight (5.1.0.1) と Xamarin (1.3.3) のすべての最新バージョンを使用しています。

0 投票する
1 に答える
116 参照

.net - WindsorCastle を使用した MvvmLight: Microsoft.Practices.ServiceLocation の競合

.NET プロジェクトにインストールしました。

  • MvvmLight v5.4.1.1
  • Castle.Windsor v5.0.0
  • CommonServiceLocator v2.0.2
  • CommonServiceLocator.WindsorAdapter.Unofficial v3.3.0

次に、このようにコンテナを初期化します

このエラーが発生します:

タイプ 'ServiceLocatorImplBase' は、参照されていないアセンブリで定義されています。アセンブリ 'Microsoft.Practices.ServiceLocation, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' への参照を追加する必要があります。

基本的に、MvvmLight v5.4.1.1 は CommonServiceLocator v2.0.2 を想定しており、CommonServiceLocator.WindsorAdapter.Unofficial は CommonServiceLocator v1.3.0 を想定しており、CommonServiceLocator.WindsorAdapter は CommonServiceLocator v1.0.0 を想定しています。

1 つの解決策は、CommonServiceLocator を v1.3.0 にダウングレードすることです。これは機能しますが、MvvmLight も v5.3.0 にダウングレードされます。

これを行う正しい方法は何ですか?MvvmLight と Windsor Castle を連携させるにはどうすればよいですか?