我正在使用Ninject进行DI。我有Ninject模块将某些服务绑定到内核,并将其他模块中的绑定对象用作服务。 要清除这种情况,我们看一下几行代码: 这是我的安全模块。它提供了一个名为PermissionManagerContainer
的服务。如何将对象注入Ninject模块
public class SecurityModule : NinjectModule
{
public override void Load()
{
Bind<IPermissionManagerContainer>().To<PermissionManagerContainer>().InSingletonScope();
}
}
在另一方面,我有一个FormServices
模块应该添加一个项目注入PermissionManagerContainer
。我认为代码必须是这样的:因此,在一个名为ManagePermissions.aspx
页面
public class FormServicesModule : NinjectModule
{
[Ninject.Inject]
private IPermissionManagerContainer permissionManagerContainer { get; set; }
public override void Load()
{
permissionManagerContainer.RegisterManager(formServicesPermissionManager);
}
}
,我再次注入PermissionManagerContainer
,创造所有模块的权限管理用户界面。例如,我需要在我的FormServices模块中保护表单,并为该服务中的每个表单定义权限。
但我认为在将它注入另一个模块之前不能保证绑定PermissionManagerContainer
!
其实,我有我自己的解决方案来解决这个问题。我可以写一个名为MyModule的抽象类,它是从NinjectModule中分类出来的,并编写一个名为InitializeModule的抽象方法。并在该方法中调用RegisterManager
。然后在加载内核中的所有模块之后,为每个加载的模块调用InitializeModule。
但我的问题是:
- 不Ninject内部或不具有这个功能吗?
- Ninject很可能在内部管理这种情况,我可以在加载方法中调用
RegisterManager
。这是真的吗?
其实我试图用Ninject来创建类似Composite Web Application Block的东西。我用我自己的解决方案,它适合我。你为什么说它滥用模块?你能否给我提供一些文件来阅读它? – alisabzevari
你说得对。但我同意你的[Ninject.Inject]部分。我使用Kernel.Get来获取服务实例,并使用Load之外的方法调用它(我必须确保PermissionManagerContainer绑定到Ninject)。 – alisabzevari