1

.Net の世界には、単純でメタデータの構成をあまり必要としない DI フレームワークはありますか? xmlなどを使用していますか?

Java の世界での非常に良い例は JBoss Weld でしょう。Weld を使用すると、オブジェクトを返すプロデューサー メソッド (カスタム アノテーションでマークできるメソッド) を持つことができます。上記で生成されたオブジェクトは、必要に応じて注入できます。これにより、多くのメタデータ構成が節約されます。もちろん、Weld も xml を必要としますが、大規模な構成は必須ではありません。

4

2 に答える 2

3

ninjectを使用すると、コードで次のように型をバインドできます。

Bind<IWarrior>().To<Ninja>();

属性を使用するninjectを使用したコンテキストバインディングについては、これを見てください

クラスを装飾する属性を作成する

class ClimberNeeded : Attribute{}

特定のコンテキストでインターフェースを実装にバインドしますWhenClassHas

Bind<IWarrior>().To<Samurai>().WhenClassHas<ClimberNeeded>();

属性でクラスを飾ります。

[ClimberNeeded]
class MountainousAttack {
    [Inject]
    IWarrior StandardMountainWarrior { get; set; }
}

ここでStandardMountainWarriorは a のSamurai代わりに a になりNinjaます。


次に、自動登録を備えたさらに優れたTinyIOCがあります:)または次のことができます:

container.Register<IMyInterface, MyImplementation>();

そして、タイプを解決するための巧妙なデリゲートを作成できるようにするfunq 。これは本当にドキュメントが不足しています。しかし、素晴らしいビデオキャストがあります


もちろん、もっとたくさん。たとえば、すべて「コード内」構成を持つunitystructuremap、およびwindsorです。

于 2012-07-27T08:28:17.417 に答える
1

私もNInjectに投票します。しかし、.NET 用の他のほとんどすべての IoC コンテナーは、コード構成可能になりました。注釈の使用を避けることを提案しましたが、代わりにコンストラクター注入を好みます。私たちは.NETの世界にいるので、注釈、またはより良い属性は、コードをコンテナーと結合させます。これは、主にコードの結合を減らすためにコンテナーを使用するため、アンチパターンのように聞こえます。

于 2012-07-27T08:49:53.337 に答える