public static void Register(this IRegisterableLake lake, Type t) { var attr = t.GetCustomAttribute <ComponentAttribute>(); if (attr.Id != null) { if (attr.SingletonMode) { lake.RegisterSingleton(attr.Id, () => new ObjectBuilder(t, lake).Build()); } else { lake.Register(attr.Id, () => new ObjectBuilder(t, lake).Build()); } } else { if (attr.SingletonMode) { lake.RegisterSingleton(attr.Type, () => new ObjectBuilder(t, lake).Build()); } else { lake.Register(attr.Type, () => new ObjectBuilder(t, lake).Build()); } } }
#pragma warning restore CS8618 // 不可为 null 的字段未初始化。请考虑声明为可以为 null。 /// <summary> /// 初始化整个框架 /// </summary> /// <param name="baseAPI"></param> public static void Initialize(IBaseApi baseAPI) { Lake = baseAPI.GlobalLake; RegisterComponent(baseAPI); //加载拓展模块 Lake.Get <ILibsManager>().Initialize(); }
private static void RegisterBase(this IRegisterableLake lake, Type target, ComponentFactory factory) { if (target is null) { throw new ArgumentNullException(nameof(target)); } lake.RegisterBase(GenerateIdByType(target), factory); }
public ClassComponentsLoader(string prefix, IRegisterableLake target, params Assembly[] assemblies) { if (string.IsNullOrEmpty(prefix)) { throw new ArgumentException("message", nameof(prefix)); } if (target is null) { throw new ArgumentNullException(nameof(target)); } this.prefix = prefix; this.target = target; this.assemblies = assemblies?.Any() == true ? assemblies : AppDomain.CurrentDomain.GetAssemblies(); }
private static void RegisterBase(this IRegisterableLake lake, string id, ComponentFactory factory) { if (lake is null) { throw new ArgumentNullException(nameof(lake)); } if (id is null) { throw new ArgumentNullException(nameof(id)); } if (factory is null) { throw new ArgumentNullException(nameof(factory)); } lake.RegisterComponent(id, factory); }
/// <summary> /// 向一个湖注入一个已经被标记为组件的类 /// </summary> /// <exception cref="ArgumentNullException">参数为空</exception> /// <exception cref="InvalidOperationException">传入的类型不是组件</exception> /// <param name="lake"></param> /// <param name="componentType"></param> public static void Register(this IRegisterableLake lake, Type componentType) { if (lake is null) { throw new ArgumentNullException(nameof(lake)); } if (componentType is null) { throw new ArgumentNullException(nameof(componentType)); } var componentAttribute = componentType.GetCustomAttribute <ComponentAttribute>(); if (componentAttribute == null) { throw new InvalidOperationException($"{componentType.FullName} is not component"); } if (componentAttribute.Id != null) { if (componentAttribute.SingletonMode) { lake.RegisterSingleton(componentAttribute.Id, () => new ObjectBuilder(componentType, lake).Build()); } else { lake.Register(componentAttribute.Id, () => new ObjectBuilder(componentType, lake).Build()); } } else { if (componentAttribute.SingletonMode) { lake.RegisterSingleton(componentAttribute.Type, () => new ObjectBuilder(componentType, lake).Build()); } else { lake.Register(componentAttribute.Type, () => new ObjectBuilder(componentType, lake).Build()); } } }
private static void RegisterSingletonBase(this IRegisterableLake lake, string id, ComponentFactory factory) { if (lake is null) { throw new ArgumentNullException(nameof(lake)); } if (id is null) { throw new ArgumentNullException(nameof(id)); } if (factory is null) { throw new ArgumentNullException(nameof(factory)); } var lazy = new Lazy <object?>(() => factory()); lake.RegisterComponent(id, () => lazy.Value); }
public static IRegisterableLake RegisterSingleton <T>(this IRegisterableLake lake, ComponentFactory factory) { RegisterSingletonBase(lake, typeof(T), factory); return(lake); }
public static IRegisterableLake Register <T, TImpl>(this IRegisterableLake lake) where TImpl : T { RegisterBase(lake, typeof(T), GetObjectBuilderOf(lake, typeof(TImpl))); return(lake); }
public static IRegisterableLake Register(this IRegisterableLake lake, Type target, Type impl) { RegisterBase(lake, target, GetObjectBuilderOf(lake, impl)); return(lake); }
public static IRegisterableLake Register <T>(this IRegisterableLake lake, Type impl) { RegisterBase(lake, typeof(T), GetObjectBuilderOf(lake, impl)); return(lake); }
public static IRegisterableLake Register <T>(this IRegisterableLake lake, ComponentFactory factory) { RegisterBase(lake, typeof(T), () => factory()); return(lake); }
private static void RegisterSingletonBase(this IRegisterableLake lake, Type target, ComponentFactory factory) { lake.RegisterSingletonBase(GenerateIdByType(target), factory); }
/// <summary> /// 加载 /// </summary> /// <param name="baseAPI"></param> public static void Load(IBaseApi baseAPI) { Lake = baseAPI.GlobalLake; RegisterComponent(baseAPI); }
public static IRegisterableLake Register(this IRegisterableLake lake, string id, ComponentFactory factory) { lake.RegisterBase(id, factory); return(lake); }
public static IRegisterableLake RegisterSingleton(this IRegisterableLake lake, string id, object value) { lake.RegisterSingletonBase(id, () => value); return(lake); }
public static IRegisterableLake RegisterSingleton <T>(this IRegisterableLake lake, T value) { RegisterSingletonBase(lake, typeof(T), () => value); return(lake); }
public ComponentFactoryReader(IRegisterableLake registerableLake, Type factoryType) { this.registerableLake = registerableLake ?? throw new ArgumentNullException(nameof(registerableLake)); this.factoryType = factoryType ?? throw new ArgumentNullException(nameof(factoryType)); }
public static IRegisterableLake Register(this IRegisterableLake lake, Type t, ComponentFactory factory) { RegisterBase(lake, t, () => factory()); return(lake); }
public static IRegisterableLake RegisterSingleton <T>(this IRegisterableLake lake, T value) { RegisterSingletonBase(lake, typeof(T), () => value ?? throw new NullReferenceException("Should not be NULL")); return(lake); }