SimpleIocクラス（MVVM Light Toolkit リファレンス）

# SimpleIoc
## 概要

```csharp
public class SimpleIoc : ISimpleIoc
```

- シンプルなIOC（Inversion of Control: [制御の反転](https://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E3%81%AE%E5%8F%8D%E8%BB%A2 "Wikipedia")）コンテナーのクラス。[サービスロケーター](https://en.wikipedia.org/wiki/Service_locator_pattern "Wikipedia")を実装する。

##### 名前空間
- `GalaSoft.MvvmLight.Ioc`

#### アセンブリ
- GalaSoft.MvvmLight.Extras


## メソッド
### ContainsCreated&lt;TClass&gt;
<details><summary>ContainsCreated&lt;TClass&gt;</summary><div>

```csharp
public bool ContainsCreated<TClass>()
public bool ContainsCreated<TClass>(string key)
```

##### 概要
- 引数`key`を指定した場合、その`key`を付けて生成した`TClass`のインスタンスが、コンテナー内にあるかを戻す。
- 引数を指定しなかった場合、キーを付けて生成したインスタンスを含め、`TClass`のインスタンスが、コンテナー内にあるかを戻す。

##### 戻り値
- コンテナー内に`TClass`のインスタンスがある場合、`true`を戻す。
</div></details>


### GetAllCreatedInstances<br> GetAllCreatedInstances&lt;TService&gt;
<details><summary>GetAllCreatedInstances, GetAllCreatedInstances&lt;TService&gt;</summary><div>

```csharp
public System.Collections.Generic.IEnumerable<object> GetAllCreatedInstances(System.Type serviceType)
public System.Collections.Generic.IEnumerable<TService> GetAllCreatedInstances<TService>()
```

##### 概要
- `serviceType`または`TService`で指定したクラスの、コンテナー内の全てのインスタンスを戻す。
- コンテナー内に指定したクラスのインスタンスがない場合、このメソッドを呼び出してもインスタンスを生成しない。

##### 戻り値
- 指定したクラスの、コンテナー内の全てのインスタンスのコレクションを戻す。
- 引数`serviceType`を指定した場合、戻り値は`object`のコレクション。
- 型引数`TService`を指定した場合、戻り値は`TService`のコレクション。
</div></details>


### GetAllInstances<br> GetAllInstances&lt;TService&gt;
<details><summary>GetAllInstances, GetAllInstances&lt;TService&gt;</summary><div>

```csharp
public System.Collections.Generic.IEnumerable<object> GetAllInstances(System.Type serviceType)
public System.Collections.Generic.IEnumerable<TService> GetAllInstances<TService>()
```

##### 概要
- `serviceType`または`TService`で指定したクラスの、コンテナー内の全てのインスタンスを戻す。
- コンテナー内に指定したクラスのインスタンスがない場合、インスタンスを生成する。

##### 戻り値
- 指定したクラスの、コンテナー内の全てのインスタンスのコレクションを戻す。
- 引数`serviceType`を指定した場合、戻り値は`object`のコレクション。
- 型引数`TService`を指定した場合、戻り値は`TService`のコレクション。
</div></details>


### GetInstance<br> GetInstance&lt;TService&gt;
<details><summary>GetInstance, GetInstance&lt;TService&gt;</summary><div>

```csharp
public object GetInstance(System.Type serviceType)
public object GetInstance(System.Type serviceType, string key)
public TService GetInstance<TService>()
public TService GetInstance<TService>(string key)
```

##### 概要
- `serviceType`または`TService`で指定したクラスの、インスタンスを戻す。
- 引数`key`を指定した場合、その`key`を付けて生成したインスタンスを戻す。
- 指定したクラス、および`key`を付けて生成したインスタンスがコンテナー内にない場合、インスタンスを生成する。

##### 戻り値
- 指定したクラス、および`key`が付けて生成したインスタンスを戻す。
- 引数`serviceType`を指定した場合、戻り値は`object`。
- 型引数`TService`を指定した場合、戻り値は`TService`。

##### 例外
- 指定したクラスがコンテナーに登録されていない場合、`CommonServiceLocator.ActivationException`が投げられる。
</div></details>


### GetInstanceWithoutCaching<br> GetInstanceWithoutCaching&lt;TService&gt;
<details><summary>GetInstanceWithoutCaching, GetInstanceWithoutCaching&lt;TService&gt;</summary><div>

```csharp
public object GetInstanceWithoutCaching(System.Type serviceType)
public object GetInstanceWithoutCaching(System.Type serviceType, string key)
public TService GetInstanceWithoutCaching<TService>()
public TService GetInstanceWithoutCaching<TService>(string key)
```

##### 概要
- `serviceType`または`TService`で指定したクラスの、新たに生成したインスタンスを戻す。コンテナー内にインスタンスがある場合も、インスタンスを生成する。また、生成したインスタンスは、コンテナー内に登録しない。
- 引数`key`を指定した場合、その`key`を付けて生成したインスタンスを戻す。

##### 戻り値
- 指定したクラス、および`key`が付けて生成したインスタンスを戻す。
- 引数`serviceType`を指定した場合、戻り値は`object`。
- 型引数`TService`を指定した場合、戻り値は`TService`。

##### 例外
- 指定したクラスがコンテナーに登録されていない場合、`CommonServiceLocator.ActivationException`が投げられる。
</div></details>


### GetService
<details><summary>GetService</summary><div>

```csharp
public object GetService(System.Type serviceType)
```

##### 概要
- `TService`で指定したクラスの、インスタンスを戻す。
- 指定したクラスのインスタンスがコンテナー内にない場合、インスタンスを生成する。
- `GetInstance(System.Type serviceType)`メソッドと同等である。

##### 戻り値
- 指定したクラスのインスタンスを戻す。戻り値は`TService`。

##### 例外
- 指定したクラスがコンテナーに登録されていない場合、`CommonServiceLocator.ActivationException`が投げられる。
</div></details>


### IsRegistered&lt;T&gt;
<details><summary>IsRegistered&lt;T&gt;</summary><div>

```csharp
public bool IsRegistered<T>()
public bool IsRegistered<T>(string key)
```

##### 概要
- 引数`key`を指定した場合、その`key`を付けて`T`がコンテナーに登録されているかを戻す。
- 引数を指定しなかった場合、`T`がコンテナーに登録されているかを戻す。

##### 戻り値
- `T`がコンテナーに登録されている場合、`true`を戻す。
</div></details>


### Register&lt;TClass&gt;<br> Register&lt;TInterface, TClass&gt;
<details><summary>Register&lt;TClass&gt;, Register&lt;TInterface, TClass&gt;</summary><div>

```csharp
public void Register<TClass>()
public void Register<TClass>(bool createInstanceImmediately)
public void Register<TClass>(System.Func<TClass> factory)
            where TClass : class
public void Register<TClass>(System.Func<TClass> factory, bool createInstanceImmediately)
            where TClass : class
public void Register<TClass>(System.Func<TClass> factory, string key)
            where TClass : class
public void Register<TClass>(System.Func<TClass> factory, string key, bool createInstanceImmediately)
            where TClass : class
public void Register<TInterface, TClass>()
            where TInterface : class
            where TClass : class, TInterface
public void Register<TInterface, TClass>(bool createInstanceImmediately)
     	    where TInterface : class
            where TClass : class, TInterface
```

##### 概要
- コンテナーに`TClass`を登録する。
- 型引数`TInterface`を指定した場合、インターフェイス`TInterface`を実装するクラスとして`TClass`をコンテナーに登録する。<br>（`TInterface`を指定して`GetInstance`メソッド等を実行した場合、`TClass`のインスタンスが得られる）
- 引数`createInstanceImmediately`が`true`ならば、直ちにインスタンスを生成する。<br>（`false`を指定した、または、引数`createInstanceImmediately`を指定しなかった場合、`GetInstance`メソッド等を実行した時点で、インスタンスを生成する）
- 引数`factory`を指定した場合、インスタンスの生成に`factory`を使う。
- 引数`key`は、`TClass`または`TInterface`とともにコンテナーに登録される。`GetInstance`メソッド等でインスタンスを区別するキーに用いる。
</div></details>


### Reset
<details><summary>Reset</summary><div>

```csharp
public void Reset()
```

##### 概要
- コンテナー内の全ての登録を削除する。
</div></details>


### Unregister&lt;TClass&gt;
<details><summary>Unregister&lt;TClass&gt;</summary><div>

```csharp
public void Unregister<TClass>()
public void Unregister<TClass>(string key)
public void Unregister<TClass>(TClass instance)
```

##### 概要
- 型引数`TClass`で指定したクラスの登録を、コンテナーから削除する。
- 引数`key`を指定した場合、`key`を付けた`TClass`の登録のみを、コンテナーから削除する。`TClass`の他の登録があれば、それらはコンテナーから削除されない。
- 引数`instance`を指定した場合、そのインスタンスのみを、コンテナーから削除する。`TClass`の登録は、コンテナーから削除されない。
</div></details>


## プロパティ
### Default
<details><summary>Default</summary><div>

```csharp
public static GalaSoft.MvvmLight.Ioc.SimpleIoc Default { get; }
```

##### 概要
- このクラスのデフォルトのインスタンス。
</div></details>


## 参照
- [目次](https://qiita.com/h084/items/c5355fa734936c56ca50/)
- [ISimpleIoc](https://qiita.com/h084/items/d6bf43863010624f01f5)