4

Windsor/Microkernel について私が読んだことから、理論的には、xml ファイルを使用してコードで実行できることはすべて実行可能です。実際のところ、間違っていたら訂正してください。Windsor 層の主な貢献は、Microkernel が既に実行できることに対して xml 構成を追加することのようです。

ただし、コードでもう少し複雑な機能を実装する方法 (つまり、デフォルトのコンストラクター引数値を割り当てる方法) を見つけるのに最近苦労しています。現在、本番リリースで xml を使用する予定ですが、テスト用のコードでコンポーネントを登録していますが、これはかなり問題になっています。これは、彼らのドキュメントの不幸な状態と、私が見つけることができる唯一の記事がxml登録に焦点を当てているという事実によって助けられていません.

物事をコードに登録する方法をリストしているソースを知っている人はいますか (できれば xml に相当するものを使用してください)。その存在を抜きにして、Castle Windsor/Microkernel の xml 以外の重要な使用があるオープン ソース/サンプル プロジェクトを知っている人はいますか?

4

1 に答える 1

6

オープンソース プロジェクトの使い方を学ぶには、単体テストを見るのが一番だといつも思っています。Castle には流暢なインターフェースがあり、すべてをコードで行うことができます。WindsorDotNet2Testsテスト ケースから:

[Test]
    public void ParentResolverIntercetorShouldNotAffectGenericComponentInterceptor()
    {
        WindsorContainer container = new WindsorContainer();
        container.AddComponent<MyInterceptor>();

        container.Register(
            Component.For<ISpecification>()
                .ImplementedBy<MySpecification>()
                .Interceptors(new InterceptorReference(typeof(MyInterceptor)))
                .Anywhere
            );
        container.AddComponent("repos", typeof(IRepository<>), typeof(TransientRepository<>));

        ISpecification specification = container.Resolve<ISpecification>();
        bool isProxy = specification.Repository.GetType().FullName.Contains("Proxy");
        Assert.IsFalse(isProxy);
    }

さらに詳しくは、ComponentRegistrationTestCaseAllTypesTestCaseをご覧ください。

それを行うための DSL もあります。これは、物事を本当に単純化し、多くの簡単な拡張性を提供するため、私の好みのオプションです。DSL は Binsor と呼ばれ、詳細についてはhttp://www.ayende.com/Blog/archive/7268.aspxを参照 してください。ただし、情報を得るのに最適な場所は単体テストです。これは binsor で可能なことのコード例です:

for type in AllTypesBased of IController("Company.Web.Controller"):
    component type

これらの 2 つの行は、IController インターフェイスをコンテナーに継承するすべての型を登録します:D

于 2008-09-18T14:56:13.593 に答える