【发布时间】:2016-01-01 20:55:31
【问题描述】:
我正在尝试找出如何将 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 的cmets,我将进一步解释这个类的作用。 (希望能解释一下为什么我的手被绑住了)
我的应用程序能够使用 Azure Active Directory 对用户进行身份验证,并且支持多租户。在身份验证管道中,我可以将验证端点存储在我的数据库中,而不是 web.config 文件中的默认方式。 See MSDN 和this,这实际上是在解释我在做什么。
所以我在标签 issuerNameRegistry 下的 web.config 中注册了我的课程。在验证管道的某个时刻,我的类被实例化,并且被覆盖的方法 IsThumbprintValid 正在被调用。问题是在 issuerNameRegistry 中注册的类需要一个无参数构造函数(就是它!受约束的构造!),因此我无法创建一个可以解决我的问题的构造函数。
感谢您的帮助
【问题讨论】:
-
如果您解释为什么无法添加构造函数会很有帮助,因为这似乎是解决问题最明显的方法。
-
我现在不这样做,只是不会让我这样做。在使用 Azure-AD 进行身份验证期间,此类在 IIS 管道中的某处被调用。如果我创建构造函数 public DatabaseIssuerNameRegistry(IPortalTenantManager portalTenantManager).. 它失败
-
您期望您的新类将如何被框架使用?你为什么没有发布框架文档的链接?您需要明确您的类是如何实例化的,并且不是使用constrained construction 完成的。
-
感谢@NightOwl88 的评论。我已经按照您的建议对问题进行了一些编辑,包括一些链接,并阅读了有关受限结构的链接,但就是这样!
标签: asp.net-mvc c#-4.0 dependency-injection wif structuremap4