.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);

                            }
                        }
                    }
                }
            }
        }
}
posted @ 2022-04-13 18:24  Hey,Coder!  阅读(55)  评论(0)    收藏  举报