我扩展了服务堆栈提供的CredentialsAuthProvider,以允许我对Active-Directory实例进行身份验证。 AD访问逻辑封装在名为 AdManager 的自定义类中(见下文) e.g:
public class AdCredentialsAuthProvider : CredentialsAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService,
string userName,
string password)
{
IAdManager manager = new AdManager();
return manager.Authenticate(userName, password);
}
...
问题:
我错过了什么吗? 谢谢
答案 0 :(得分:7)
您可以使用提供的IServiceBase
从AuthProvider中访问IOC,例如:
var addManager = authService.TryResolve<IAdManager>();
您可以随时使用Singleton解决依赖关系:
var addManager = HostContext.TryResolve<IAdManager>();
否则,如果您知道它位于ASP.NET Web Host中,您也可以通过AppHost单例访问它:
var addManager = AppHostBase.Instance.Resolve<IAdManager>();
答案 1 :(得分:1)
Service Stack也使用属性注入。我在扩展Service栈提供的Service类时使用了属性注入。
public class MyService : Service
{
public MyService(IDb db)
{
//db constructor inject
}
public IValidator<MyData> MyDataValidator { get; set; }
public object Get(MyData request)
{
//MyDataValidator is property injected
}
}
我相信相同的逻辑可以应用于AuthProvider。但我没有测试过它。