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

时间:2014-03-01 19:15:30

标签: c# .net entity-framework dynamic-class-loaders

我使用实体框架在我的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

2 个答案:

答案 0 :(得分:0)

我建议将其更改为:

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

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

答案 1 :(得分:0)

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

这应该可以获得所有已加载的程序集,而不仅仅是当前程序集。