我扩展了 service-stack 提供的 CredentialsAuthProvider 以允许我针对 Active-Directory 实例进行身份验证。 AD 访问逻辑封装在一个名为 AdManager 的自定义类中(见下文) 例如:
public class AdCredentialsAuthProvider : CredentialsAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService,
string userName,
string password)
{
IAdManager manager = new AdManager();
return manager.Authenticate(userName, password);
}
...
问题:
- 我希望我可以在我的扩展“AppHostBase”中使用服务堆栈内置 IoC“Funq.Container”注册 AdManager,并从我的自定义 CredentialsAuthProvider 中访问它?我尝试注册它,但没有找到通过内置框架的服务堆栈访问 IoC(或我注册的 AdManager 对象)的方法。
我错过了什么吗? 谢谢
最佳答案
您可以使用提供的 IServiceBase
从 AuthProvider 中访问 IOC,例如:
var addManager = authService.TryResolve<IAdManager>();
在其他任何地方,您始终可以使用 Singleton 解决依赖关系:
var addManager = HostContext.TryResolve<IAdManager>();
否则,如果您知道它位于 ASP.NET Web 主机中,您也可以通过 AppHost 单例访问它:
var addManager = AppHostBase.Instance.Resolve<IAdManager>();
关于自定义 CredentialsAuthProvider 中的 ServiceStack 访问 Ioc 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15959134/