获得没有全局参考的当前用户

时间:2015-01-05 09:19:14

标签: c# asp.net multithreading unit-testing

我有一个服务电话DataManager需要对当前IPrincipal用户的引用。但是,我不想使用像System.Threading.Thread.CurrentPrincipalHttpContext.Current.User这样的全局引用,因为我希望能够对其进行单元测试并为任何给定的测试指定任何用户。但我也不想为多线程环境(如WebApi或Web Services)中的每个线程构造一个新的DataManager

如果我注入(通过构造函数)内部使用IPrincipalHttpContext.Current.User的{​​{1}}实现,这是不好的做法还是会破坏任何内容?否则我该如何处理?

我想到的解决方案看起来像这样:

HttpContext.Current.User

然后,在ASP.NET中使用它时,传入一个引用HTTP上下文当前用户的IPrincipal实现:

public class DataManager {
        public DataManager(IPrincipal currentUser){
                this.currentUser = currentUser;
        }
        private IPrincipal currentUser;
        ...
        public void DoWork(){
                var currentUserName = currentUser.Identity.Name;
                // Do work here
        }
}

0 个答案:

没有答案