1. 程式人生 > 其它 >.net5 根據型別注入所有的繼承關係

.net5 根據型別注入所有的繼承關係

//所有的service繼承一個公共的介面,根據這個公共介面進行注入
//未處理泛型,所以此處的型別需要使用公共介面

public class RepositoryDIFactory
    {
        private static RepositoryDIFactory data;

        public static RepositoryDIFactory Instance = data ?? (data = new RepositoryDIFactory());

        /// <summary>
        /// 
        /// </summary>
        /// <param name="service"></param>
        /// <param name="baseType"></param>
        public void Inject(IServiceCollection service,Type baseType)
        {
            //根據type型別載入不同倉儲
            var assembly = GetAssemblyList();
            foreach (var item in assembly)
            {
                foreach (Type type in item.GetTypes())
                {
                    if (baseType.IsAssignableFrom(type) && type.IsClass && !type.IsAbstract)
                    {
                        Type[] interfaces = type.GetInterfaces();
                        foreach (Type i in interfaces)
                        {
                            if (!i.IsGenericType && i != baseType && i.Name != baseType.Name)
                            {
                                service.AddScoped(i, type);
                                test.Add(i.Name, type.Name);

                            }
                        }
                    }
                }
            }
        }
}