mrp*_*nut 5 c# dependency-injection asp.net-core
我一直在使用一个技巧来帮助维护审计跟踪.在控制器中或之前,我创建了一个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)
但我不能让这个工作.在asp.net 5之前,我一直在使用Autofac来实现这一目标,但那里没有运气.我尝试过使用transient/scoped/singleton,但没有运气.我甚至尝试过解析我自己IServiceProvider并直接使用它,而不仅仅是生成一个用户c => c.GetRequiredService<IUser>
我做的每件事似乎都在使用错误的IServiceProvider实例.有没有办法解决不同的实例ServiceProvider?任何其他建议也会有所帮助.
在你建议我只是注册所有内容之前AddScoped(),我的演示文稿和持久层之间的一些对象作为单身人士工作得更好.
此外,我不希望仅将User信息作为参数传递给我的域中的每个方法(我们几乎每个CRUD操作都会记录它,并通过我们制作的大多数外部调用传递它)
| 归档时间: |
|
| 查看次数: |
728 次 |
| 最近记录: |