Wil*_*rst 5 asp.net-mvc castle-windsor custom-attributes
我是Castle Windsor,它适用于控制器构造函数传递正在使用的存储库.
private IStoryRepository Repository;
public StoryController(IStoryRepository Repository)
{
this.Repository = Repository;
}
Run Code Online (Sandbox Code Playgroud)
现在我在管理区域中有一个Action来显示主管理菜单.我使用了自定义授权属性,只检查登录用户是否为admin(只是users表中的isAdmin标志)
[AdminAuthorize]
public ActionResult Menu()
private IStoryRepository Repository;
/// <summary>
/// Initializes a new instance of the <see cref="AdminAuthorizeAttribute"/> class.
/// </summary>
public AdminAuthorizeAttribute(IStoryRepository Repository)
{
this.Repository = Repository;
}
/// <summary>
/// Checks if the user is authorised
/// </summary>
/// <param name="httpContext">The HTTP context.</param>
/// <returns>
/// <c>true</c> if authorized; otherwise, <c>false</c>.
/// </returns>
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return this.Repository.UserIsAdmin(httpContext.User.Identity.Name);
}
Run Code Online (Sandbox Code Playgroud)
如何让Castle将存储库传递给属性构造函数,就像它对控制器构造函数一样?
你基本上有两个选择。将过滤器包装在代理中,可以在此处找到一个很好的示例。
或者,在自定义过滤器中,您可以执行显式容器调用。例如使用 StructureMap (我没有广泛使用城堡)
ObjectFactory.GetInstance(IStoryRepository)
Run Code Online (Sandbox Code Playgroud)
可能还有第三种方法,即扩展 ActionInvoker 来进行注入,但我不确定这是如何完成的。
| 归档时间: |
|
| 查看次数: |
1672 次 |
| 最近记录: |