在我们的ASP.NET项目中,我们有一个会话管理器服务接口,我们用它来查找有关当前用户的信息。例如:
var actorId = _sessionManager.CurrentActivePerson.PersonId;
此会话管理器通过基于构造函数的依赖注入提供给类。
现在,我们有一个WCF服务,我们希望根据具体情况实例化不同的DI绑定:
为了使其正常工作,我们需要允许使用者提供域ID作为参数,尽管它没有被指定为服务本身的参数。然后,当HostFactory创建服务实例时,我们需要能够从DI绑定方法访问此参数。
有人对我们如何做到这一点有任何建议吗?
注意:
答案 0 :(得分:2)
这听起来像是一个认证/授权问题而不是DI问题。如果是这种情况,最正确的低级解决方案实际上是implement a custom token。
这是一项相当复杂的任务,因此您应该认真考虑切换到基于声明的授权。 Windows Identity Foundation提供了许多工具来完成此任务。
这意味着您不必管理两个根本不同的安全上下文(用户名与域ID),而是将身份管理外部化,这样您就不必处理这种交叉问题< / strong>在应用程序代码中。这样可以更好地分离关注点。
但是,如果您确实需要将依赖项的解析推迟到实际方法调用the universal solution is to inject an abstract factory。
如果您需要有关如何为WCF启用构造函数注入的信息,请按以下步骤操作:Injecting data to a WCF service