タグ付けされた質問 「dependency-injection」

機能させる必要のあるソフトウェアコンポーネントの依存関係を動的に挿入することにより、コンポーネント間の結合を減らす設計パターン。

2
IoCコンテナを使用してエンティティ/ビジネスオブジェクトの依存関係を解決してみませんか?
DIの背後にある概念は理解していますが、さまざまなIoCコンテナーで何ができるかを学んでいます。ほとんどの人がステートレスサービスを接続するためにIoCコンテナーを使用することを提唱しているようですが、エンティティなどのステートフルオブジェクトにそれらを使用するのはどうでしょうか。 それが正しいか間違っているかにかかわらず、私は通常、その動作に外部クラスが必要な場合でも、エンティティに動作を詰め込みます。例: public class Order : IOrder { private string _ShipAddress; private IShipQuoter _ShipQuoter; public Order(IOrderData OrderData, IShipQuoter ShipQuoter) { // OrderData comes from a repository and has the data needed // to construct order _ShipAddress = OrderData.ShipAddress; // etc. _ShipQuoter = ShipQuoter; } private decimal GetShippingRate() { return _ShipQuoter.GetRate(this); …

8
ロガーをシングルトンにするのは良い習慣ですか?
次のように、ロガーをコンストラクターに渡す習慣がありました。 public class OrderService : IOrderService { public OrderService(ILogger logger) { } } しかし、それは非常に面倒なので、私はしばらくの間、これをプロパティとして使用しました。 private ILogger logger = NullLogger.Instance; public ILogger Logger { get { return logger; } set { logger = value; } } これも面倒になります-乾いていないので、すべてのクラスでこれを繰り返す必要があります。基本クラスを使用することもできますが、Formクラスを使用しているので、FormBaseなどが必要になります。したがって、ILoggerを公開したシングルトンを使用することのデメリットは何でしょうか。 Infrastructure.Logger.Info("blabla"); 更新:マーリンが正しく気づいたように、最初と2番目の例ではDIを使用していることを言及する必要があります。

1
.Net Core 3ワーカーサービスでアプリ設定をセットアップする方法
.Net Core 3でappsettings.jsonを読むことに関するチュートリアルとSOの質問(App Settings .Net Coreなど)をいくつか見てきましたが、Workerサービスを処理するときのハウツーに関するポインターが見つかりません。スタートアップメソッドはありません。代わりに、mainメソッドを含むProgram.csがあります。 public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); } .Net Core 3のワーカーサービスプロジェクトのappsettings.jsonファイルから読み取るにはどうすればよいですか? .Net v4.8で作成したカスタムWCFクライアントへの参照と、すべてのビジネスドメインオブジェクトのみをソリューション全体で共有する別のプロジェクトへの参照を追加しました。私のソリューションは主に.Net v4.8であり、ワーカーサービスを使用したいと考えています。クライアントプロジェクトは、コードによって内部的にWCFクライアントを作成するため、すべてのバインディングとエンドポイントを構成できます。これが.Net v4.8プロジェクトである場合、以下をapp.configに追加します。 <appSettings> ... <add key="AminServiceUri" value="http://localhost:45108/ServiceHost/v1/AminService.svc" /> <add key="BillServiceUri" value="http://localhost:45108/ServiceHost/v1/BillService.svc" /> <add …

2
Angular 8と9で「ウィンドウ」とウィンドウの提供と注入の違いは何ですか?
これらのバージョンを使用する2つのAngularプロジェクトがあります。 9.0.0-next.6 8.1.0 バージョン9では、これを使用してwindowオブジェクトを提供および注入しました。 @NgModule({ providers: [ { provide: Window, useValue: window }, ] }) export class TestComponent implements OnInit { constructor(@Inject(Window) private window: Window) } それはうまくいきます。 このアプローチをバージョン8に適用すると、コンパイル中に警告とエラーがスローされました。 警告:TestComponentのすべてのパラメーターを解決できません… 私はこのように単一引用符を使用してそれを解決しました: @NgModule({ providers: [ { provide: 'Window', useValue: window }, ] }) export class TestComponent implements OnInit { constructor(@Inject('Window') private window: …

3
すべてをスタートアップクラスに追加する以外に、ASP.NET Core 3.1で依存関係を登録するための堅牢な方法はありますか?
ASP.NET Core 3.1プロジェクトがあります。通常、クラスのConfigureServices()メソッドを使用して依存関係を登録しますStartup.cs。 しかし、私は多くの依存関係を登録しなければならないことに気づき、ConfigureServices()見た目は巨大です!静的メソッドの拡張メソッドを作成してConfigureService() `クラスから呼び出すことができることはわかっていますが、もっと良い方法があるかどうか疑問に思っています。 このように1つずつ定義する必要なしにIoCコンテナに依存関係を登録する方法がある場合 services.AddScoped<Interface, Class>(); .... 200 lines later services.AddScoped<ISettings, Settings>()

3
Pythonのファクトリメソッドとインジェクトフレームワーク-何がよりクリーンですか?
私のアプリケーションで通常行うことは、ファクトリメソッドを使用してすべてのサービス/ dao / repo /クライアントを作成することです class Service: def init(self, db): self._db = db @classmethod def from_env(cls): return cls(db=PostgresDatabase.from_env()) アプリを作成するとき service = Service.from_env() すべての依存関係を作成するもの テストで実際のデータベースを使用したくない場合は、DIを実行します service = Service(db=InMemoryDatabse()) サービスはデータベースの作成方法を知っており、どのデータベースタイプを作成するか(InMemoryDatabseまたはMongoDatabaseでもかまいません)を知っているため、これはクリーン/ 16進数アーキテクチャとはかなり異なると思います。 私はクリーン/ 16進アーキテクチャでは私が持っていると思います class DatabaseInterface(ABC): @abstractmethod def get_user(self, user_id: int) -> User: pass import inject class Service: @inject.autoparams() def __init__(self, db: DatabaseInterface): …

2
サービスを構成するときに依存関係注入を使用してAzure Function V3でIConfigurationを注入または使用する方法
通常、.NET Coreプロジェクトでは、DI登録コマンドとともにサービスを構成するための「ブーストラップ」クラスを作成します。これは通常、メソッドをIServiceCollection呼び出すことができる拡張メソッドであり、.AddCosmosDbService必要なものはすべて、そのメソッドを含む静的クラスで「自己完結型」です。重要なのは、メソッドがクラスIConfigurationからを取得することStartupです。 私は過去にAzure FunctionsでDIを使用したことがありますが、この特定の要件にはまだ遭遇していません。 関数をAzureにデプロイするときに、IConfiguration私local.settings.jsonと開発/プロダクションアプリケーションの両方の設定に一致するプロパティを持つ具体的なクラスにバインドするためにを使用しています。 CosmosDbClientSettings.cs /// <summary> /// Holds configuration settings from local.settings.json or application configuration /// </summary> public class CosmosDbClientSettings { public string CosmosDbDatabaseName { get; set; } public string CosmosDbCollectionName { get; set; } public string CosmosDbAccount { get; set; } public string CosmosDbKey { get; set; …

2
アプリケーションコードから「BuildServiceProvider」を呼び出すと、シングルトン警告のコピーが生成されます。どうすればこれを回避できますか?
別のプロジェクトの最後に4行を貼り付けたところ、うまくいきましたが、警告が表示されます。DIが十分に理解されていないことは明らかです。 public void ConfigureServices(IServiceCollection services) { if (HostingEnvironment.EnvironmentName == "Local") { services.AddHealthChecksUI() .AddHealthChecks() .AddCheck<TestWebApiControllerHealthCheck>("HomePageHealthCheck") .AddCheck<DatabaseHealthCheck>("DatabaseHealthCheck"); } services.Configure<PwdrsSettings>(Configuration.GetSection("MySettings")); services.AddDbContext<PwdrsContext>(o => o.UseSqlServer(Configuration.GetConnectionString("PwdrsConnectionRoot"))); services.AddMvc(o => { o.Filters.Add<CustomExceptionFilter>(); }); services.AddCors(options => { options.AddPolicy("CorsPolicy", b => b .SetIsOriginAllowed((host) => true) .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()); }); services.AddSwaggerDocument(); services.AddHttpContextAccessor(); services.AddAutoMapper(typeof(ObjectMapperProfile)); services.AddTransient<IEmailSender, EmailSender>(); services.AddScoped(typeof(IAppLogger<>), typeof(LoggerAdapter<>)); services.AddScoped(typeof(IAsyncRepository<>), typeof(Repository<>)); services.AddScoped<IRfReportTypeRepository, RfReportTypeRepository>(); …

1
xcodeスキームのビルドターゲットリストにReact(missing)があるのはなぜですか?
Xcodeを使用してiOSデバイスで最初のReact-Nativeアプリを実行しようとしていますが、このエラーが発生し続けます。 ld: warning: directory not found for option '-L/Users/XXXX/Library/Developer/Xcode/DerivedData/nigh-hktjvygosupgnoaafsvgyowhzsqi/Build/Products/Debug-iphoneos/React' ld: library not found for -lReact clang: error: linker command failed with exit code 1 (use -v to see invocation) 原因は、SchemeのビルドターゲットリストにReactが含まれていないことに関連していると思います。すべてのボックスがチェックされたリストの最初にReactが表示されますが、ReactだけではなくReact(missing)と表示されます。 ビルドターゲットリストのスクリーンショット 「+」ボタンをクリックすると、Reactはオプションになりません。これが私のポッドファイルです: platform :ios, '10.0' require_relative '../node_modules/react-native-unimodules/cocoapods' target 'nigh' do # Pods for nigh pod 'React', :path => '../node_modules/react-native', :subspecs …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.