gpt4 book ai didi

asp.net-mvc - ASP.NET MVC : HTTPContext and Dependency Injection

转载 作者:行者123 更新时间:2023-12-03 14:47:39 24 4
gpt4 key购买 nike

目前我有一个 ActionFilter 从 HttpContext 获取当前用户名并将其传递给在服务方法上使用它的操作。例如:

Service.DoSomething(userName);

我现在有理由不在操作级别而是在 Controller 构造函数级别执行此操作。目前我正在使用结构映射来创建 Controller 并注入(inject)服务。我正在看类似的东西:
public interface IUserProvider
{
string UserName { get; }
}

public class HttpContextUserProvider : IUserProvider
{
private HttpContext context;

public HttpContextUserProvider(HttpContext context)
{
this.context = context;
}

public string UserName
{
get
{
return context.User.Identity.Name;
}
}
}

也就是说,我的 IoC foo 真的很弱,因为这是我使用它的第一个项目。

所以我的问题是......如何告诉结构映射在 HttpContextUserProvider 的构造函数中传递 HttpContext?这看起来很奇怪......我不确定如何看待 HttpContext。

最佳答案

听起来你应该使用 HttpContextBase而不是 HttpContextUserProvider .这是 HttpContext 的开箱即用抽象。并允许您创建模拟、编写单元测试并注入(inject)您的依赖项。

public class SomethingWithDependenciesOnContext
{
public SomethingWithDependenciesOnContext(HttpContextBase context) {
...
}

public string UserName
{
get {return context.User.Identity.Name;}
}
}

ObjectFactory.Initialize(x =>
x.For<HttpContextBase>()
.HybridHttpOrThreadLocalScoped()
.Use(() => new HttpContextWrapper(HttpContext.Current));

关于asp.net-mvc - ASP.NET MVC : HTTPContext and Dependency Injection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/877712/

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