小编mrp*_*nut的帖子

我可以在asp.net 5中的单例实例中解析范围实例

我一直在使用一个技巧来帮助维护审计跟踪.在控制器中或之前,我创建了一个User以某种方式绑定到请求的域.我可以使用DI创建我的大部分应用程序作为单例,我可以Func<User>在我认为需要User信息的任何地方注入.我从Func获得了每个请求用户,并且可以轻松地将审计信息添加到所有内容中.

这使我的域类User不可知,并让我的DI容器充当User管理系统.

现在我正在使用asp.net 5,我在做同样的事情时遇到了麻烦.老实说,我从来没有想过我应该能做到这一点,但我已经习惯了.

我正在尝试做这样的事情:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddScoped<IUser, User>();
    services.AddSingleton<IDependantOnUser, DependantOnUser>
    services.AddScoped<Func<IUser>(c => c.GetRequiredService<IUser>);
}
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器之前或之前,我创建并填充用户实例.

public class ValuesController : Controller
{
    public ValuesController(Func<User> userFunc)
    {
        user = userFunc();
        // hydrate user instance as needed
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,我应该可以访问我的singleton对象中的用户实例.

public class DependantOnUser : IDependantOnUser
{
    public DependantOnUser(Func<User> userFunc)
    {
        user = userFunc();
        // I want this to be the same instance as that generated by the controller …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection asp.net-core

5
推荐指数
1
解决办法
728
查看次数

标签 统计

asp.net-core ×1

c# ×1

dependency-injection ×1