我的代码的某些部分需要使用ServiceLocator,因为不支持构造函数注入。
我的启动类配置服务。我有一些是瞬态的,另一些是单例的,还有其他作用域。
例如:
services.AddScoped<IAppSession, AppSession>();
services.AddScoped<IAuthentication, Authentication>();
services.AddScoped<NotificationActionFilter>();
在我的服务定义结尾,我有以下一段代码块,用于设置服务定位器。
var serviceProvider = services.BuildServiceProvider();
DependencyResolver.Current = new DependencyResolver();
DependencyResolver.Current.ResolverFunc = (type) =>
{
return serviceProvider.GetService(type);
};
我注意到在一个请求中,我从服务定位器中获取的实例与从构造函数注入中获取的实例不同。从服务定位器返回的实例似乎是单例的,并且不遵守作用域规则。
DependencyResolver
的代码如下:public class DependencyResolver
{
public static DependencyResolver Current { get; set; }
public Func<Type, object> ResolverFunc { get; set; }
public T GetService<T>()
{
return (T)ResolverFunc(typeof(T));
}
}
我该怎么修复这个问题?