/// <summary> /// 実装クラスを登録する。登録済みの型でも上書き可能。 /// </summary> /// <param name="createMethod">インスタンス生成メソッド</param> /// <param name="lifetime">ライフタイム</param> /// <param name="key">コンテナ名</param> /// <typeparam name="T">登録型</typeparam> public static void Register <T>(Func <T> createMethod, Lifetime lifetime, string key = "default") { // 登録情報作成 var createObjMethod = new Func <object>(() => (object)createMethod()); var createInfo = new CreateInfo(createObjMethod, lifetime); // 登録先コンテナ取得 var containerKv = ContainerDic.FirstOrDefault(kv => kv.Key.Equals(key)); if (IsNull(containerKv)) { // コンテナが存在しないので、先にコンテナを作ってから var newContainer = new Dictionary <Type, CreateInfo> { { typeof(T), createInfo } }; ContainerDic.Add(key, newContainer); } else { // コンテナに登録 var container = containerKv.Value; if (container.ContainsKey(typeof(T))) { container.Remove(typeof(T)); } container.Add(typeof(T), createInfo); } }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Public Static Property // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// 指定したキー名のコンテナ内に指定したクラスの生成メソッドが登録されているかどうかを返す。 /// </summary> /// <param name="key">[NotNull] キー名</param> /// <typeparam name="T">チェック対象のクラス型</typeparam> /// <returns>生成メソッドが登録されている場合true</returns> /// <exception cref="ArgumentNullException">keyがnullの場合</exception> public static bool HasCreateMethod <T>(string key = "default") { if (key is null) { throw new ArgumentNullException( ErrorMessage.NotNull(nameof(key))); } // キー名のコンテナ存在チェック var containerKv = ContainerDic.FirstOrDefault(kv => kv.Key.Equals(key)); if (IsNull(containerKv)) { return(false); } // コンテナ内の情報チェック var container = containerKv.Value; return(container.ContainsKey(typeof(T))); }