0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

メモ サービスロケーターとDependency Injection

Posted at

サービスロケーター パターン
依存関係を 解決しに行く 手法
public class ServiceLocator
{
private Dictionary container = new Directionary(1);//GCAllocがおこらないようにある程度のキャパシティをはじめから確保しておく
public T Resolve()
{
return (T)container[typeOf(t)];
}

public void Register<T>(T instance)
{
	container.Add(typeOf(T),instance);
}

}
依存性の注入
Dependency Injection
依存するオブジェクトを注入するパターン
DIContinerというものがあり、依存関係を設定しておくと、それに応じて自動的にインスタンスを設定して回ってくれるオブジェクトです。
zenjectでのインスタンスプレハブをDIcontinerを使う方法
Factoryを経由してインスタンスを生成する

class MoveFactory:PlaceholderFactory//継承してクリエイトできるようにする
{
//経由するためのものなのでからでもよい
//マーカー的な感じ
}
public class UnityTestInstaller:MonoInstaller
{
GameObject prefab;

public override void InstallBinding()
{
	Continer
		.BindFactory<Mover,MoverFactory>()
		.FromCompenentInNewPrefab(prefab);
}

}

使う際は
public class MoveGene:MonoBehaviour
{
[inject] private MoveFactory factory;

void Start()
{
	factory.Create();//生成
}

}

DIcontinerを直接使って生成する場合

public class MoverGenerator: MonoBehaviour
{
private GameObject MoverPrefab;

[Inject] private DiContainer container;//コンテナを取得

void Start()
{
    // Containerから直接生成する
    container.InstantiatePrefab(MoverPrefab);




var go = Instantiate(MovePrefab);
//AddComponentみたいな使い方もできる
container.InstantiateComponent<Mover>(go);
}

}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?