7

は LightInject のベンチマークが大好きです。彼らは非常識です!さすが、.Net パフォーマンスに関する本を書いた方がいいですね。私は本気です。

ドキュメントを見ました。

dllをインストールしました。そのステップに従ってください。

次に、ドキュメントの次のステップでは、containerオブジェクトがあることを前提としています。

container.Register<IFoo, Foo>();
var instance = container.GetInstance<IFoo>();
Assert.IsInstanceOfType(instance, typeof(Foo));

おっと!確かに、私は箱の中で最も鋭いクレヨラではないかもしれませんが、今何をすべきですか? 残りの例に従うことができるように「設定」するには、どのクラスとメソッドを作成する必要がありますか? (プロジェクト全体で機能するように設定した方がよいと思います)

余談ですが、明示的ではないにしても、他の「manページ」を参照して、その時点でドキュメントにこれらの手順を追加するのは間違っていますか? コンテナを取得するにはさまざまな方法があるかもしれません。どれが必要かを知るには十分ではありません。ドキュメントのこの時点で、「これは 90% の状況で機能する」例と、より特殊なケースへのリンクを探していました。

ありがとう!

4

1 に答える 1

9

準備万端です。IFoo はインターフェイスであり、Foo は具体的な実装です。やりたいことは何でもできるはずです。チュートリアルは、DI に必要なものを示しているだけです。たとえば、IFoo でメソッド DoStuff を作成し、それを Foo に実装してから呼び出します: 'instance.DoStuff();'

何かのようなもの:

using LightInject;
using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var container = new ServiceContainer();
            container.Register<IFoo, Foo>();
            container.Register<IBar, Bar>();
            var foo = container.GetInstance<IFoo>();
            foo.DoFooStuff();
        }
    }

    public interface IFoo
    {
        void DoFooStuff();
    }

    public class Foo : IFoo
    {
        // this property is automatically populated!
        public IBar MyBar { get; set; }

        public void DoFooStuff()
        {
            MyBar.DoBarStuff();
            Console.WriteLine("Foo is doing stuff.");
        }
    }

    public interface IBar
    {
        void DoBarStuff();
    }

    public class Bar : IBar
    {
        public void DoBarStuff()
        {
            Console.WriteLine("Bar is doing stuff.");
        }
    }
}
于 2015-03-12T19:22:12.283 に答える