0

FAST IoC コンテナーを探していて、Dynamo.IoC を見つけました。

単純な ServiceLocator のように機能させるのは簡単ですが、コンストラクタ インジェクションに使用するにはどうすればよいでしょうか。

ここにクラスの例があります

    private interface ITestInterface
    {

    }

    private class TestClass : ITestInterface
    {

    }

    private class TestClassWithDependency
    {
        public ITestInterface DependecyInstance { get; private set; }

        public TestClassWithDependency( ITestInterface dependencyInstance )
        {
            DependecyInstance = dependencyInstance;
        }
    }

そして失敗したテスト

    [Test]
    public void Test_Container_Resolve_WithDependency()
    {
        Container.Register<ITestInterface, TestClass>();

        var obj = Container.Resolve<TestClassWithDependency>( );


        obj.Should().NotBeNull();
        obj.DependecyInstance.Should( ).NotBeNull( );
    }
4

1 に答える 1

0

インターフェイスを使用してパラメーター化されたコンストラクターにクラスを登録する必要があると思います。次に、通常どおり.RegisterTypeを登録すると、「dependencyInstance」を注入できます。下記を参照してください。

public interface ITestInterface
{}

public class TestClass : ITestInterface
{}

public interface ITestClassWithDependency {
    ITestInterface DependecyInstance { get;  }
}

public class TestClassWithDependency : ITestClassWithDependency
{
    public ITestInterface DependecyInstance { get; private set; }


    public TestClassWithDependency(ITestInterface dependencyInstance)
    {
        DependecyInstance = dependencyInstance;
    }
}

public class MyClass
{
    [Test]
    public void Test_Container_Resolve_WithDependency()
    {
        using (var container = new IocContainer())
        {
            container.Register<ITestInterface, TestClass>();
            container.Register<ITestClassWithDependency, TestClassWithDependency>();

            var obj = container.Resolve<ITestClassWithDependency>();

            Assert.IsNotNull(obj);
            Assert.IsNotNull(obj.DependecyInstance);
        }

    }
}
于 2013-10-08T12:46:38.760 に答える