我一直在使用一个技巧来帮助维护审计跟踪.在控制器中或之前,我创建了一个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)