【发布时间】:2014-07-06 23:10:19
【问题描述】:
按照我在这个帖子中给出的建议 [Ninject UOW pattern, new ConnectionString after user is authenticated 我现在明白我不应该使用以下行...
var applicationConfiguration =
(IApplicationConfiguration)
DependencyResolver.Current.GetService(typeof(IApplicationConfiguration));
...作为服务定位器是一种反模式。
但是在以下过程的情况下,我如何实例化实现“IApplicationConfiguration”的具体对象,以便我可以使用该对象获取未知的用户角色名称,或使用它来分配到我的原则的“ApplicationConfiguration”属性?
Global.asax
public class MvcApplication : NinjectHttpApplication
{
/// <summary>
/// Handles the PostAuthenticateRequest event of the Application control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
String[] roles;
var applicationConfiguration =
(IApplicationConfiguration)
DependencyResolver.Current.GetService(typeof(IApplicationConfiguration));
var identity = HttpContext.Current.User.Identity;
if (Request.IsAuthenticated)
{
roles = Roles.GetRolesForUser(identity.Name);
}
else
{
roles = new[] { applicationConfiguration.UnknownUserRoleName };
}
var webIdentity = new WebIdentity(identity, roles);
var principal = new WebsitePrincipal(webIdentity)
{
ApplicationConfiguration = applicationConfiguration
};
HttpContext.Current.User = principal;
}
.
.
.
}
分辨率映射代码
public class ApplicationConfigurationContractMapping : NinjectModule
{
public override void Load()
{
Bind<IApplicationConfiguration>()
.To<ApplicationConfiguration>();
}
}
应用程序配置
public class ApplicationConfiguration : IApplicationConfiguration
{
.
.
.
.
}
我使用 Ninject 作为我的依赖注入框架。任何建议表示赞赏。
编辑:完整的代码可以在这里看到: https://github.com/dibley1973/Dibware.Template.Presentation.Web
【问题讨论】:
标签: c# dependency-injection ninject anti-patterns service-locator