問題タブ [dryioc]
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.
dryioc - クラスライブラリでメインアプリからdryiocコンテナを利用する方法
私はdryiocが初めてなので、無知を許してください:)
次の場合の正しいアプローチが何であるかを理解したいと思います。
dryioc コンテナーのインスタンスを作成するコンソール アプリを作成します。コンテナーにロガーを登録します (シングルトンとして)。次に、コンソール アプリで使用するクラス ライブラリ (別のプロジェクト) からクラスをインスタンス化し、クラス ライブラリからコンテナー (メイン アプリ) を参照して logger のインスタンスを取得できるようにします。したがって、クラス ライブラリは、コンソール アプリに登録されている任意のロガーを利用します。
クラス ライブラリのコンストラクタの一部としてコンテナを渡したくないです。
ご協力ありがとうございます。
xamarin - PrismDryIoc.Forms AutowireViewModel が機能しない
Prism Unity アプリを作成し (prism 拡張パックから - 本当に素晴らしい)、2 つの新しいビューを追加し、ビュー間の基本的なナビゲーションをセットアップしました。これはすべて、問題なく正常に機能しました。
本当に欲しいのは、DryIoc を使用することです (会社のポリシー)。そこで、Unity パッケージ (Unity および Prism.Unity.Forms) を削除し、DryIoc パッケージ (DryIoc および Prism.DryIoc.Forms) をインストールしました。正しい名前空間 (xmlns:prism="clr-namespace:Prism.DryIoc;assembly=Prism.DryIoc.Forms") を使用するように App.xaml を修正し、Unity 参照ではなく DryIoc を使用するように他のすべての参照を修正しました。
これはすべて例外なくコンパイルおよび実行されます。しかし、デバッグすると、AutoWireup が期待どおりに機能しないことは明らかです (少なくとも私が期待するとおり)。ViewModel のコンストラクター (またはその他の場所) のブレークポイントはヒットせず、タイトル バインディングはプルスルーされません。
不足している構成/セットアップまたはリファレンスはありますか?
私のコード: App.xaml:
アプリ.xaml.cs:
MainPage.xaml:
MainPageViewModel.cs:
上記のように、AutoWireUp を True に設定して、PageName & PageNameViewModel の標準命名規則を使用します。
これはすべてUnityでうまく機能しましたが、DryIocで何かが欠けています...しかし、私を逃れるものは何ですか。
プロジェクト全体を検索しましたが、Unity の参照や痕跡は残っていません。
どんな助けでも大歓迎です。
c# - 関数で解決する DryIoc
の結果としてオブジェクトを解決しようとしていますFunc<>
。しかし、私はそれを行う方法が見つかりません。
たとえば、ここに変数 (関数の引数) lazyInt
(何らかの長時間実行された計算の結果である可能性があります) があり、後で使用する前にその結果は必要ありません。
などを使って少し試してみましたServiceInfo.Of
が、とりあえず成功しませんでした。どうすればそれができますか?
c# - DryIoc を使用して複数のサービス登録を持つシングルトンを作成する
問題
DryIoc を使用してシングルトンを登録しようとしていますが、コンテナーがシングルトン クラスの複数のインスタンスを返しています。singleton クラスは、複数の異なるサービス インターフェイスの実装タイプとして登録されます。前述のサービス インターフェイスのいずれかが DryIoc から要求された場合、シングルトン クラスの同じインスタンスが返されることを期待していますが、そうはならず、その理由がわかりません。
例
これが私がやろうとしていることの基本的な例です。この例では、インターフェイスおよびFoo
のシングルトン実装として使用したいクラスがあります。つまり、またはがコンテナから解決されたときに、 の同じインスタンスが返されるようにしたいと考えています。IFoo
IBar
IFoo
IBar
Foo
サービス インターフェイス
シングルトン (実装) クラス
テスト
考えられる解決策
DryIoc のRegisterInstance
メソッドを使用することを検討しましたが、それにはクラスを手動で作成する必要があり、上記の単純化された例とは異なり、実際のクラスには独自の依存関係があるため、それを回避しようとしています。
c# - XXX を解決できません。サービス登録が見つからず、Rules.FallbackContainers の数: 0 および Rules.UnknownServiceResolvers の数: 0
私のアプリは最後の行でエラーを受け取ります:
受け取ったエラー:
XXX を解決できません。サービス登録が見つからず、Rules.FallbackContainers の数: 0 および Rules.UnknownServiceResolvers の数: 0
私のコード:
dryioc - すべてのクラス Singleton および DbContext を WebRequest として持つ DryIoc
完全なシングルトン アプリケーション (Web およびコンソール) を作成しようとしています。ただし、エンティティ DbContext は Web 上の PerWebRequest で使用する必要があります。
これをサポートするには、コンテナにどのように登録すればよいですか? クラスがシングルトンとして初期化されると、注入されたすべてのクラスもシングルトンとしてメモリ上の単一のインスタンスで実行されることを理解しています。
次のコードは、すべての Web アプリケーションとコンソール アプリケーションのコンテナーの初期化です。- コンソールで実行している場合、どのように登録すればよいですか? - Web で実行し、Owin がスタートアップを呼び出す場合、認証で使用するオブジェクトを解決する必要がある場合がありますが、Owin は「コンテキストなし」環境で実行されます。それを検出して使用する方法は?
dryioc - DryIOC デコレータと InResolutionScopeOf
基本インターフェース (MediatR ハンドラー) の解決スコープに注入したい依存関係をセットアップしようとしています:
ただし、このインターフェイスは、DbContext に依存する IActionHandler に依存するいくつかのデコレータでセットアップされています。
その IActionHandler の実装を解決しようとして例外が発生しました。これは、スコープ内で使用できないように見えるため、DbContext を挿入できないためです。
IActionHandler を InResolutionScopeOf のターゲットに設定しようとしましたが、IAsyncRequestHandler<,> で DbContext を解決できません。
各 DbContext インスタンスが、IAsyncRequestHandler<,> の解決に由来するすべてのデコレーターまたは IActionHandler で使用できるようにする必要があり、そのインスタンスは IAsyncRequestHandler<,> 実装にも挿入する必要があります。
このタイプの注射をどのように達成できるかについてのアイデアはありますか?
ありがとう
c# - DryIoc : IDisposable Decorator オブジェクトを登録する方法がわかりません
私はIDisposable
dbコンテキストの周りにデコレータをセットアップしようとしています:
最後の行のコメントを外すと、プログラムは次のようにスローします。
DryIoc.ContainerException: Registered Disposable Transient service Lib.DI.IContext with key {no key} and factory container won't be disposed by container. DryIoc does not hold reference to resolved transients, and therefore does not control their dispose. To silence this exception Register<YourService>(setup: Setup.With(allowDisposableTransient: true)) or set the rule Container(rules => rules.WithoutThrowOnRegisteringDisposableTransient()). To enable tracking use Register<YourService>(setup: Setup.With(trackDisposableTransient: true)) or set the rule Container(rules => rules.WithTrackingDisposableTransient())
à DryIoc.Throw.It(Int32 error, Object arg0, Object arg1, Object arg2, Object arg3)
à DryIoc.Container.ThrowIfInvalidRegistration(Factory factory, Type serviceType, Object serviceKey, Boolean isStaticallyChecked)
à DryIoc.Container.Register(Factory factory, Type serviceType, Object serviceKey, IfAlreadyRegistered ifAlreadyRegistered, Boolean isStaticallyChecked)
à DryIoc.Registrator.Register[TService,TImplementation](IRegistrator registrator, IReuse reuse, Made made, Setup setup, IfAlreadyRegistered ifAlreadyRegistered, Object serviceKey)
と混ぜる方法Setup.Decorator
はtrackDisposableTransient
?