据我所知,DependencyResolver是线程安全的。然而,在后台线程中运行以下代码会抛出空引用异常。
我知道“服务定位器”模式是一种反模式。目前,我只是想理解为什么这种方式行不通。
欢迎提供任何见解。
谢谢!
public interface ITest {
}
public class Test : ITest {
}
//this works fine
var service = DependencyResolver.Current.GetService<ITest>();
var t1 = Task.Run(() => {
//This throws a Null Reference exception.
// note that DependencyResolver.Current is NOT null.
// The exception occurs in GetService
var s1 = DependencyResolver.Current.GetService<ITest>();
});
Task.WaitAll(t1);
以下是堆栈跟踪信息:
at Unity.Mvc4.UnityDependencyResolver.get_ChildContainer()
at Unity.Mvc4.UnityDependencyResolver.IsRegistered(Type typeToCheck)
at Unity.Mvc4.UnityDependencyResolver.GetService(Type serviceType)
at System.Web.Mvc.DependencyResolverExtensions.GetService[TService](IDependencyResolver resolver)
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
我知道“服务定位器”模式是一种反模式。目前,我只是想理解为什么这种方式行不通。
欢迎提供任何见解。
谢谢!