使用 Assembly.GetExecutingAssembly() 从其他类库中获取程序集



我使用实体框架在我的ObjectContext类中映射数据库中的类:

 var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
            .Where(type => !String.IsNullOrEmpty(type.Namespace))
            .Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
            foreach (var type in typesToRegister)
            {
                dynamic configurationInstance = Activator.CreateInstance(type);
                modelBuilder.Configurations.Add(configurationInstance);
            }
            //Replace with ....
            //modelBuilder.Configurations.Add(new EntityMap());

上面的代码获取所有类typeof(EntityTypeConfiguration<>)。如果我的"EntityMap"类与我的对象上下文位于同一类库中,那没关系,但是如果我map classes我在单独的类库中编写,则不起作用。 Map classes无法在ObjectContext上识别。

var assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assembly in assemblies)
{ 
    assembly.GetTypes().Where(type => !String.IsNullOrEmpty(type.Namespace))
                       .Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
    foreach (var type in typesToRegister)
    {
        dynamic configurationInstance = Activator.CreateInstance(type);
        modelBuilder.Configurations.Add(configurationInstance);
    }
}

这应该会让您获得所有加载的程序集,而不仅仅是当前程序集。

我建议将其更改为:

var typesToRegister = typeof(MapClass).Assembly.GetTypes()
                      .....

其中MapClass是从另一个程序集中的EntityTypeConfiguration<T>继承的类之一。

最新更新