問題タブ [tinyioc]
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.
c# - TinyIoC Resolve プラグイン コントラクト
TinyIoC を使用してプラグインの連絡先を解決するにはどうすればよいでしょうか?
Host.exe /w Core.Contract.dll への参照
Core.Contracts.dll のコントラクト IService であり、ホスト アセンブリで参照されます。これは、ドラッグ アンド ドロップ プラグインが再コンパイルせずに機能する機会を与えるためです。EchoCodeAnalysis.dll には、ホスト アセンブリで参照されていない実際のプラグイン実装がありますが、IService を使用して Core.Contracts.dll のホストを共有しています。
Core.Contract.dll:
EchoCodeAnalysis.dll:
編集:
問題の最初の部分を解決することができました。
すべての IService インターフェイスをフェッチして解決します。これにより、プラグインはそのインターフェイスに制限され、上位の実装には制限されません。たとえば、IService として実装された IMenuItem の場合、上記のコードは、IService の起源にさかのぼる任意のクラスを見つけることができますが、IService として解決されると、IService プロパティのみをフェッチし、含まれない IMenuItem を明示的に実装するクラスを見つけることができます。 IMenuItem プロパティ。そこです。container.Register(types.ToArray()).AsRespectiveImplementations() が便利です。しかし、この問題の周りにどこかありますか? それとも、これは TinyIOC を拡張するために作成する必要があるユーティリティですか?
編集2:
その後、拡張機能に移行しましたが、まだ何も解決されていません。
上記の Container.Register には InterfaceTypeArgument = IMenuItem, t = EchoMenu : IMenuItem, Name = "EchoMenu" という正しい値を渡していますが、実装として EchoMenu を登録した後で IMenuItem を解決するようにコンテナーに要求すると、null が返されます。すべてを解決します。
何かご意見は?
c# - TinyIoC を使用してコンストラクター引数で具象型を解決する
Nancy API があり、から継承するカスタム Bootstraper を作成しましたDefaultNancyBootstrapper
。
ConcreteFoo
また、リクエストスコープで自分自身にバインドし、特定のコンストラクター引数を渡したい具体的なタイプもあります。
私のカスタム Bootstraper は次のとおりです。
ConcreteFoo
目的のコンストラクタ パラメータで解決するために、 TinyIoC Wikiで提供されている例を使用しました。カスタム ブートストラップのオーバーライドからコードが渡されることに気付きましたresponse
。
ただし、アプリケーションのブートストラップ中に例外が発生します。inner-inner-inner... (多くの内部) 例外は以下にリストされており、作成ConcreteFoo
できず、解決できないと述べていますSystem.Int32
。
この関連する質問を見つけましたが、具象型ではなくインターフェイスを登録することを指しています。
私は何か間違ったことをしていますか、それとも具象型を解決してコンストラクター引数を提供する別の方法に精通していますか?
c# - 不明な型の TinyIoC レジスタ インスタンス
tinyioc を介して内部的に接続されているライブラリのユーザーが、ライブラリ内で定義されたインターフェイスの独自の実装を渡せるようにしようとしています。これは、インスタンスが必要になるたびに解決されます。
たとえば、ユーザーは次の操作を実行できます。
ライブラリ内で、渡されたロガーを配線したいと思います。次のようなものです。
しかし、TinyIoc でこれを行う方法が見つかりません。これはサポートされていますか? TinyIoc が認識しているタイプのインスタンスの登録をサポートしていることは知っていますが、タイプが不明な場合はそうではありません。
c# - メイン インスタンスから DI インジェクション チェーンを破棄する方法
https://github.com/int6/CoiniumServ/blob/develop/src/CoiniumServ/Pools/Pool.cs
これは私のプールクラスです。クラスを破棄するときにそれが必要です。すべての依存関係は機能を停止し、それ自体を破棄する必要があります。
私は処分するためにすべての依存関係に idisposable を実装しようとしましたが、うまくいきません。
また、スレッドで関数を実行するスレッドを実装し、スレッドの中止でそれを破棄します。それも機能しません。
これを行う他の方法はありますか?
c# - NancyContext を使用する Nancy のシリアライザーを登録する
入力の一部として要求された URL を使用する Nancy モジュールのカスタム シリアル化を使用したいと考えています。
ConfigureRequestContainer のオーバーライドでコンテキストを使用する依存関係を登録する必要があることを見てきました ( C# IOC および Request State in NancyFX で回答されているように)
そして、 IRegistrations インターフェースを使用してナンシーに別のシリアライザーを指定できることを見てきました ( Nancy TinyIoC を使用した JsonNetSerializer および JsonNetBodyDeserializer の構成で回答されているように)
最初の方法でシリアライザーを登録すると、Nancy に JSON シリアライゼーションに使用させることができません。
2 番目の方法で登録すると、現在の NancyContext のコピーを挿入してリクエストにアクセスできなくなります。メソッドが呼び出される前に、シリアライザーのインスタンスを作成しようとします。ConfigureRequestContainer
ここで何が欠けていますか?
c# - ナンシーはコンストラクターパラメーターでシングルトンを作成します
依存関係を解決するために、TinyIoC で Nancy を使用しています。
特に 1 つの依存関係は、アプリケーション ライフサイクル シングルトンである必要があります。
デフォルトのコンストラクターでそれを行うと、動作します:
しかし、コンストラクターでいくつかの引数を使用してこれを試しても、そうではありません:
.AsSingleton()
なくても、再び機能しますが、シングルトンを取得できません:
何か案は?間違いは明らかだと思いますが、見つけられません。私はすべてのgoogle-fooを使い果たしました。
編集
コードは次の場所で実行されます。