gpt4 book ai didi

asp.net-mvc - 如何将 IoC 成员资格提供程序与 ASP.NET MVC 集成

转载 作者:行者123 更新时间:2023-12-03 13:29:51 25 4
gpt4 key购买 nike

我有一个自定义成员资格/角色提供程序,我在我的 MVC Controller 中使用它,我也希望 ASP.NET MVC 可以访问它,所以我可以使用 AuthorizationFilters 等。由于很多人已经实现了自定义提供程序,我想很多人已经完成了这但我还没有弄清楚或找到专门解决这个问题的帖子。 This post这是我问题的另一面。就我而言,我的自定义提供程序与我的 Controller 配合良好,我希望 MVC 也可以使用它。

我的提供程序是通过 IoC/依赖注入(inject)设计实现的。提供者公开了超出基线成员资格/角色 API 的附加功能。在我的 Controller 中,我使用 CaSTLe Windsor 创建实例。代码类似于:

public class HomeController : Controller {
IMembershipService _membershipService;
public HomeController(IMembershipService membershipService) {
_membershipService= membershipService;
}
}

<castle>
<components>
<component id="MembershipService"
service="IMembershipService, MyApp"
type="MembershipService, MyApp" lifestyle="PerWebRequest">
<parameters>
<connectionString>#{defaultConnectionString}</connectionString>
</parameters>
</component>
</components>
</castle>

public class WindsorControllerFactory : DefaultControllerFactory {
private WindsorContainer _container;
public WindsorControllerFactory() {
_container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));

List<Type> controllerTypes = new List<Type>();
foreach (Type t in Assembly.GetExecutingAssembly().GetTypes()) {
if (typeof(IController).IsAssignableFrom(t))
controllerTypes.Add(t);
}

foreach (Type t in controllerTypes) {
// LifestyleType.Transient = new controller instance for each request
_container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient);
}
}

protected override IController GetControllerInstance(Type controllerType) {
return (IController)_container.Resolve(controllerType);
}

这一切在我的 C# 代码中运行良好,但我想将我的提供程序连接到 MVC 以使用 [Authorize] 过滤器:
[Authorize (Users="user1, user2", Roles="role8")]
public ViewResult MyResult(int x) {
// implement
}

我知道告诉 ASP.NET 关于自定义成员资格或角色提供程序的常用方法是在 web.config 文件中,如下所示,但如果我这样做,ASP.NET 只会尝试调用默认构造函数,这将不起作用。任何帮助表示赞赏。
<membership>
<providers>
<clear/>
<add name="MyMembershipProvider" type="MyMembershipProvider">
</providers>
</membership>

最佳答案

最简单的方法是使用 ASP.NET 的标准机制 <membership>在 web.config 中。您只需让它使用默认构造函数 但是 您覆盖 Initialize() 并将依赖项拉到那里。使用this作为引用。

就个人而言,由于这样的事情,我更喜欢完全避免提供者模型,所以我使用类似于 described in the MonoRail docs 的方法。 .恕我直言,它不那么臃肿而且更灵活。最后就是设置HttpContext.User带有适当的IPrincipal AuthorizeAttribute 使用的实现。

我最近blogged about a solution to do proper IoC with MembershipProviders .

关于asp.net-mvc - 如何将 IoC 成员资格提供程序与 ASP.NET MVC 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1003587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com