C# 如何将对象注入Ninject模块

C# 如何将对象注入Ninject模块,c#,ninject,C#,Ninject,我正在使用Ninject进行DI。我有Ninject模块,它将一些服务绑定到内核,并将其他模块中的绑定对象用作服务。 要清除这种情况,让我们看几行代码: 这是我的安全模块。它提供了一个名为PermissionManagerContainer的服务 public class SecurityModule : NinjectModule { public override void Load() { Bind<IPermissionManagerContaine

我正在使用Ninject进行DI。我有Ninject模块,它将一些服务绑定到内核,并将其他模块中的绑定对象用作服务。 要清除这种情况,让我们看几行代码: 这是我的安全模块。它提供了一个名为
PermissionManagerContainer
的服务

public class SecurityModule : NinjectModule
{
    public override void Load()
    {
        Bind<IPermissionManagerContainer>().To<PermissionManagerContainer>().InSingletonScope();
    }
}
因此,在名为
ManagePermissions.aspx
的页面中,我再次插入
PermissionManagerContainer
,并为所有模块的权限管理器创建用户界面。例如,我需要保护FormServices模块中的表单,并为该服务中的每个表单定义权限

但是我认为在将它注入另一个模块之前绑定
PermissionManagerContainer
是没有保证的

事实上,我对这个问题有自己的解决办法。我可以编写一个名为MyModule的抽象类,它是NinjectModule的子类,并编写一个名为InitializeModule的抽象方法。并在该方法中调用
RegisterManager
。然后在内核中加载所有模块之后,为每个加载的模块调用InitializeModule

但我的问题是:

  • Ninject内部是否具有此功能
  • 很可能在内部对这种情况进行Ninject管理,我可以在load方法中调用
    RegisterManager
    。这是真的吗

  • 你误解了模块的用途。它们是用来配置Ninject的。它们本身不应该有任何依赖关系。RegisterManager属于应用程序的服务或启动操作中的某个位置。或者,您可能必须更改权限管理器的工作方式,以便它可以枚举所有配置的管理器,而不是注册它们。但几乎不可能从这个问题中看出什么是最好的——只是你滥用模块的目的不是为了它们

    实际上,我试图使用Ninject创建类似复合Web应用程序块的东西。我使用了自己的解决方案,它非常适合我。你为什么说它滥用模块?你能给我一些文件让我读一下吗?你是对的。但是我同意你的[注射]部分。我使用Kernel.Get获取服务实例,并在模块加载以外的方法中调用它(我必须确保PermissionManagerContainer绑定到Ninject)。
    public class FormServicesModule : NinjectModule
    {
        [Ninject.Inject]
        private IPermissionManagerContainer permissionManagerContainer { get; set; }
    
        public override void Load()
        {
            permissionManagerContainer.RegisterManager(formServicesPermissionManager);
        }
    }