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

本文关键字:类型 激活 派生 查找 | 更新日期: 2023-09-27 18:28:01

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

我正在尝试使以下内容更易于维护:

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

请注意,我要查找的类位于不同的程序集中。。。

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

我建议您使用这样的内核,因此Ninject将处理NinjectModules:

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

修复它。

我使用了Assembly.Load():

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