Kodama

ComponentContainerImpl クラス

[This is preliminary documentation and subject to change.]

DependencyInjectionコンテナの実装クラスです

この型のすべてのメンバの一覧については、 ComponentContainerImpl メンバを参照してください。

System.Object
   Kodama.DependencyInjection.Container.ComponentContainerImpl

public class ComponentContainerImpl : IMutableComponentContainer, IComponentContainer

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、 マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

使用例

[C#]
using System;
using Kodama.DependencyInjection.Component;
using Kodama.DependencyInjection.Container;
using Kodama.DependencyInjection.Factory;
using Kodama.Function;
using Kodama.Function.Bind;
using Kodama.Function.Member;

....

public interface IBar
{
    void Print();
}

public class BarImpl : IBar
{
    public void Print()
    {
        Console.WriteLine("BarImpl");
    }
}

public class Foo
{
    private IBar dependency1;
    private IBar dependency2;
    private int  val;

    // InjectionPoint属性のついたメソッドは自動的に
    // セッターインジェクションのメソッドに設定される
    [InjectionPoint]
    public void SetDependency1(IBar dep)
    {
        dependency1 = dep;
    }

    public void SetDependency2(IBar dep, int v)
    {
        dependency2 = dep;
        val         = v;
    }

    // InitializationPoint属性のついたメソッドは自動的に
    // 初期化メソッドに設定される
    [InitializationPoint]
    public void Initialize1()
    {
        Console.WriteLine("Init1");
    }

    public void Initialize2(int v)
    {
        Console.WriteLine("Init2 val = " + v.ToString());
    }
}

...

// 通常はコンテナへのコンポーネントの登録、セッターインジェクション及び
// 初期化メソッドの設定はスクリプトで行う。
// 詳細はKodama.DependencyInjection.Factory.DefaultComponetContainerFactory#Create
// メソッドのオーバーロードを参照。

IMutableComponentContainer container = new ComponentContainerImpl();

continer.Register(typeof(BarImpl));

IComponentEntry entry = new PrototypeComponetEntry(container, typeof(Foo));

// 手動によるセッターインジェクションの設定
entry.AddInjectionFanctor(
    new BindFunctor(
        new MemberFunctor(typeof(Foo).GetMethod("SetDependency2")),
        new NotBoundArgument(0),
        new TypedArgumentComponentProvider(container, typeof(IBar)),
        1));

// 手動による初期化メソッドの設定
entry.AddInitializationFactor(
    new BindFunctor(
        new MemberFunctor(typeof(Foo).GetMethod("Initialize2")),
        new NotBoundArgument(0),
        2));

container.Register(entry);

Foo foo = (Foo)continer.GetComponent(typeof(Foo));

必要条件

名前空間: Kodama.DependencyInjection.Container

アセンブリ: Kodama.DependencyInjection (Kodama.DependencyInjection.dll 内)

参照

ComponentContainerImpl クラス | ComponentContainerImpl メンバ | Kodama.DependencyInjection.Container 名前空間