Части моего кода должны использовать 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));
}
}
Как я могу это исправить?