查找从类型派生的所有类并激活该类型

时间:2015-12-24 13:13:31

标签: c# reflection ninject

我已经看过一些类似的答案,但我无法让它发挥作用。

我试图让以下内容更易于维护:

var modules = new INinjectModule[]
{
    new ServiceModule(),
    new ApplicationSettingsModule(),
    new SerializerModule(),
    new LoggerModule(),
    new SqliteModule(),
    new SetupModule(), 
    new CacheModule(), 
    new AuthenticationModule(), 
};

每次添加新NinjectModule时,我都需要修改此数组以包含它。

我希望能够找到派生自NinjectModule的所有类型并激活它们并将它们全部放入集合中。

这是我尝试过的,但我没有得到任何来自NinjectModule的课程

var classes = (from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
                from assemblyType in domainAssembly.GetTypes()
                where typeof(NinjectModule).IsAssignableFrom(assemblyType)
                select assemblyType).ToArray();

请注意,我想要查找的课程在不同的程序集中......

2 个答案:

答案 0 :(得分:1)

我建议您使用这样的内核,因此 Ninject 会关注NinjectModules

public static IKernel ConfigureKernel(IKernel kernel)
{
      kernel.Load(Assembly.Load("NZBDash.DependencyResolver.Modules"));
      return kernel;
}

答案 1 :(得分:0)

修正了它。

我使用Assembly.Load()

var result = Assembly.Load("NZBDash.DependencyResolver.Modules").GetTypes()
               .Where(a => 
               a.IsClass &&
               a.BaseType == typeof(NinjectModule))
               .ToArray();