我正在使用 Ninject 进行 DI。我有 Ninject 模块,它将一些服务绑定到内核,并使用其他模块中的绑定对象作为服务。
为了弄清楚这种情况,让我们看几行代码:
这是我的安全模块。它提供了一个名为PermissionManagerContainer
.
public class SecurityModule : NinjectModule
{
public override void Load()
{
Bind<IPermissionManagerContainer>().To<PermissionManagerContainer>().InSingletonScope();
}
}
另一方面我有一个FormServices
应该将项目添加到注入的模块PermissionManagerContainer
。我想代码一定是这样的:
public class FormServicesModule : NinjectModule
{
[Ninject.Inject]
private IPermissionManagerContainer permissionManagerContainer { get; set; }
public override void Load()
{
permissionManagerContainer.RegisterManager(formServicesPermissionManager);
}
}
所以在一个名为ManagePermissions.aspx
我再次注入PermissionManagerContainer
并为所有模块的权限管理器创建用户界面。例如,我需要保护 FormServices 模块中的表单,并为该服务中的每个表单定义权限。
但我认为不能保证绑定PermissionManagerContainer
在将其注入另一个模块之前!
其实对于这个问题我有自己的解决办法。我可以编写一个名为 MyModule 的抽象类(它是 Ninject Module 的子类),并编写一个名为 Initialized Module 的抽象方法。并打电话RegisterManager
在那个方法中。然后在加载内核中的所有模块后,为每个加载的模块调用InitializeModule。
但我的问题是:
- Ninject 内部有这个功能吗?
- Ninject 可能会在内部管理此案例,我可以致电
RegisterManager
在加载方法中。这是真的吗?
您误解了模块的用途。他们的作用是配置 Ninject。他们本身不应该有任何依赖性。 RegisterManager 属于应用程序的服务或启动操作中的某个位置。或者您可能必须更改权限管理器的工作方式,以便枚举所有配置的管理器而不是注册它们。但几乎不可能从这个问题中看出什么是最好的——只是你正在滥用模块来完成它们不该做的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)