gpt4 book ai didi

c# - ASP.net Session_Start 方法中的依赖注入(inject)

转载 作者:行者123 更新时间:2023-11-30 14:52:00 24 4
gpt4 key购买 nike

我是第一次学习依赖注入(inject)和使用 autofac。我按照几个 autofac 示例(见下文)中提到的那样构建了容器,并从我的 application_start 中调用

public class ContainerConfig
{
public static void RegisterContainer()
{
//Create a new ContainerBuilder
var builder = new ContainerBuilder();

// Register all the controllers using the assembly object
builder.RegisterControllers(Assembly.GetExecutingAssembly());

//Registering default convention -- IExample and Example
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.Where(t => t.Name.Single(i => i.Name == "I" + t.Name))
.AsImplementedInterfaces();

//Build the container
var container = builder.Build();

//Set the default resolver to use Autofac
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}

我在核心项目中使用 IUserService 创建了 UserService。这具有使 dbcall 从表中获取用户信息的方法。在我的 UI 项目中,我有一个名为 UserProvider 的类,我想将其注入(inject) UserService。

public class UserProvider
{
private readonly IUserService _userService;

public UserProvider(IUserService userService)
{
_userService = userService;
}

public void LoadCurrentUser()
{
Users FoundUser = _userService.ImportOrGetUser();

if (FoundUser != null)
{
//add it to session
CurrentUser = FoundUser;
}
}
}

这个 UserProvider,我在我的 session_start 中使用

void Session_OnStart()
{
UserProvider OUsrPrv = new UserProvider(new UserService());
OUsrPrv.LoadCurrentUser();
}

在上面的代码中,如果我传递“new UserService()”,我的理解是我在手动注入(inject) UserService。我看不到 autofac 在这里有什么帮助。 google 中的所有示例都在谈论 MVCController 或 WebApiController 中的依赖注入(inject),而不是像我正在做的那样在单个类 (UserProvider) 中。

有人可以给我一些启发吗?我做错了吗?

最佳答案

为了正确使用依赖注入(inject),你不应该自己创建实例,底层框架应该为你提供实例。

但 ASP.net 调用 Session_OnStart 时没有任何依赖注入(inject)。在这种情况下,您可以使用 DependencyResolver.Current 静态属性来解析请求的服务。

void Session_OnStart()
{
UserProvider userProvider = DependencyResolver.Current.GetService<UserProvider>();
userProvider.LoadCurrentUser();
}

关于c# - ASP.net Session_Start 方法中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852440/

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