.net Core 學習筆記(實體字段映射,IOC注入)


https://github.com/wj1034184751/ADO.NetCore.git

先簡單的做一個學習架子,

EF層用的是 EFCore(2.1.0)+ Pomelo.EntityFrameworkCore.MySql(2.1.0)

實體映射主要是用了這三個類:

 public interface IEntityTypeConfiguration
    {
        void Map(ModelBuilder builder);
    }

    public interface IEntityTypeConfiguration<T> : IEntityTypeConfiguration where T : class
    {
        void Map(EntityTypeBuilder<T> builder);
    }

 public abstract class WGEntityTypeConfig<T> : IEntityTypeConfiguration<T> where T : class
    {
        public abstract void Map(EntityTypeBuilder<T> builder);

        public void Map(ModelBuilder builder)
        {
            Map(builder.Entity<T>());
        }
    }

  public  static class ModelBuilderExtentcs
    {
        private static IEnumerable<Type> GetMappingTypes(this Assembly assembly,Type mappingInterface)
        {
            return assembly.GetTypes().Where(x => !x.GetTypeInfo().IsAbstract && x.GetInterfaces().
            Any(y => y.GetTypeInfo().IsGenericType && y.GetGenericTypeDefinition() == mappingInterface));
        }

        public static void AddEntityConfigurationsFromAssembly(this ModelBuilder modelBuilder,Assembly assembly)
        {
            var mappingTypes = assembly.GetTypes()
               .Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(WGEntityTypeConfig<>));
            //var mappingTypes = assembly.GetMappingTypes(typeof(WGEntityTypeConfig<>));
            foreach (var config in mappingTypes.Select(Activator.CreateInstance).Cast<IEntityTypeConfiguration>())
            {
                config.Map(modelBuilder);
            }
        }
    }


然后在這里

 

 接下來是簡單的注入:

項目分成這幾層:

BLL,DAL,EF,UI

 

BLL,DAL 層要實現注入可以加一個接口,IServiceSupportExten

然后

   Assembly asmBLL = Assembly.Load(new AssemblyName("BLL"));
            var serviceBLLTypes = asmBLL.GetTypes().Where(t => typeof(IServiceSupportExten).IsAssignableFrom(t) && !t.GetTypeInfo().IsAbstract);
            foreach (var serviceType in serviceBLLTypes)
            {
                foreach (var interType in serviceType.GetInterfaces())
                {
                    services.AddSingleton(interType, serviceType);
                }
            }

            Assembly asmDAL = Assembly.Load(new AssemblyName("DAL"));
            var serviceDALTypes = asmDAL.GetTypes().Where(t => typeof(IServiceSupportExten).IsAssignableFrom(t) && !t.GetTypeInfo().IsAbstract);
            foreach (var serviceType in serviceDALTypes)
            {
                foreach (var interType in serviceType.GetInterfaces())
                {
                    services.AddSingleton(interType, serviceType);
                }
            }

  

 

.net Core 默認提供了一種注入方式,然后,自己也去網上找了代碼寫了別一種

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM