7

簡単に言えば、IoC/DI コンテナを使用する必要がある場合、デプロイが簡単で (すべてに config/xml ファイルを使用するのはあまり好きではありません)、安定しており、適切なドキュメントがあり、.net をサポートしています。

それは私だけかもしれませんが、アプリ用に 1 つ、ORM 用にいくつか、別のコンポーネント用にいくつかのような xml ファイルが多すぎると、圧倒されることがあります。また、私の見方では、物事を行う方法 (慣例) が 1 つあれば、物事が台無しになる可能性は低くなります。

あなたの提案と、可能であれば経験を楽しみにしています。私の主な関心事は、保守性と展開の容易さです。

4

6 に答える 6

4

この機能は、そこにあるほとんどのコンテナに含まれていると思います。このブログ投稿をご覧ください。それは少し古いですが、それはあなたにアイデアを与えるでしょう。今では、アクティブなコンテナはおそらくより良いサポートを持っています。

于 2009-01-15T20:15:21.770 に答える
2

おそらく、コンテナなしでDIを使用できますか?

コンストラクタインジェクションを使用する例を次に示します。

public static void Main() {
  ILogger logger = new FileLogger();
  ISession session = new ConcreteSession();
  IRepository repository = new MyDataRepositoryImpl(session, logger);

  IApplication app = new MyApplication();
  app.AddModule(new DataSelector(repository));
  app.AddModule(new Editor(repository, new MyEditorFactory(session)));
  app.AddModule(new LdapAuthenticator(session, logger));
  // ...
  app.Run();
}

このようにすると、実行可能モジュールはすべてに依存することになります。そのため、その責任を、物事をつなぎ合わせるだけに限定する必要があります。アプリケーションのコードの大部分を他のモジュールでクリーンに保つことができます。

多くの場合、インジェクションを使用して依存関係を管理するための高度なフレームワークは必要ありません。

于 2009-01-15T20:49:54.647 に答える
2

私はNinjectStructureMapを使用しています。どちらもXMLなしで構成を接続できます。

私のサイトを恥知らずに宣伝することはありませんが、ここで入手できるNinjectの使用に関するチュートリアルを作成しました。

于 2009-01-15T20:28:39.573 に答える
1

LinFuを試してみてください。これは、最も簡単で柔軟なコンテナーの 1 つであり、必要なコードの量が最も少なく、IOC コンテナー比較ですべてのテストに合格した唯一のコンテナーです。楽しみ :)

于 2009-01-15T22:35:51.127 に答える
0

StructureMapの最新バージョンである2.5.2 では、ライアンが言ったように XML を使用せずにコンテナーを構成できるだけでなく、規則に従って AutoWire する機能も備えており、まさにあなたが探しているものと思われます。

ObjectFactory.Initialize(x => x.Scan(scanner =>
                                        {
                                           scanner.TheCallingAssembly();
                                           scanner.WithDefaultConventions();
                                        }));;

IAssemblyScanner.WithDefaultConvents() のドキュメントから:

DefaultConventionScanner をスキャン操作に追加します。つまり、「ISomething」を実装する「Something」という名前の具象クラスが、PluginType「ISomething」に自動的に追加されます。

Fluent Interface を使用する既存の構成が既にあったため、個人的にはあまり行っていません。しかし、それは有望に見えます。

編集: Jeremy Miller が独自の規約の作成方法に関する投稿を投稿しました...

于 2009-01-15T21:16:26.967 に答える
0

Castle Windsor では、Register 呼び出しによってこれが可能です。簡単なシナリオは、IControllerインターフェイスを実装する多数のコントローラーがあるとします。

container.Register(AllTypes.FromAssembly(assemblyA).BasedOn(typeof(IController));

IServiceインターフェイス (メンバーなし) を作成し、それを上記に追加することで、これをさらに簡素化できます。このように、サービスを作成すると、自動的に登録されます。

于 2009-01-20T15:03:08.047 に答える