我试图找出如何将 StructrueMap 容器传递给我编写的从另一个(MS-Class)继承的类。
namespace TheNamespace
{
public class DatabaseIssuerNameRegistry : ValidatingIssuerNameRegistry
{
/* **This can't be done**
public DatabaseIssuerNameRegistry(IPortalTenantManager portalTenantManager)
{
_someField= portalTenantManager;
}*/
protected override bool IsThumbprintValid(string thumbprint, string issuer)
{
//How does it work ???????????
var portalTenantManager = container.GetInstance<IPortalTenantManager>();
//Do something with the portalTenantManager
}
}
我需要 portalTenantManager 是我在 Global.asax 的容器中定义的实例。
我的 Global Assax 设置了以下内容:
protected void Application_Start()
{
var container = new Container();
container.Configure(x =>
{ ....
....
x.For<IPortalTenantManager>().Use<PortalTenantManager>();
});
...
...
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory(container));
...
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapApiControllerFactory(container);
...
}
编辑: 由于@NightOwl888 的评论,我将进一步解释这个类的作用。(希望能解释一下为什么我的手被绑住了)
我的应用程序能够使用 Azure Active Directory 对用户进行身份验证,并且支持多租户。在身份验证管道中,我可以将验证端点存储在我的数据库中,而不是 web.config 文件中的默认方式。请参阅 MSDN 和this,它实际上正在解释我在做什么。
所以我在标签issuerNameRegistry下的 web.config 中注册了我的课程。在验证管道的某个时刻,我的类被实例化,并且被覆盖的方法IsThumbprintValid被调用。问题是在issuerNameRegistry中注册的类需要一个无参数的构造函数(就是它!受约束的构造!),因此我无法创建一个可以解决我的问题的构造函数。
谢谢你的帮助