Автоматически не вызывается статический конструктор
У меня есть статический класс, с статическим конструктором. Как я почитал, он должен вызываться автоматически, при присваивании объекта, или ссылки на класс.
Я делаю ссылку на класс, и вылетает ошибка
System.TypeInitializationException: "The type initializer for 'Margaroli.Http.HttpClass' threw an exception."
и ниже NullReferenceException
Сам статический класс:
public static class HttpClass
{
public static readonly string FirstPathLink = "https://" + Client.BaseAddress.Host + "/";
static int NumberImage = 0;
public static string SiteName { get => Cutter.Tram(Client.BaseAddress.Host.Replace(".", "").Replace(",", "")); }
public static CookieContainer CookieContainer;
private static HttpClientHandler handler;
public static HttpClient Client;
private static IConfiguration config;
public static IBrowsingContext Context;
static HttpClass()
{
HttpClass.CookieContainer = new CookieContainer();
handler = new HttpClientHandler() { CookieContainer = CookieContainer };
Client = new HttpClient(handler)
{
Timeout = TimeSpan.FromMinutes(3),
BaseAddress = new Uri("https://www.arcombagno.com/categoria-prodotti/accessori/")
}; //new RedirectHandler(new HttpClientHandler()));
config = Configuration.Default;
Context = BrowsingContext.New(config); //Client.Timeout = TimeSpan.FromMinutes(30);
Client.DefaultRequestHeaders.Add("User-Agent", "Agent22");
}
}
Класс c main:
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine(HttpClass.SiteName);
string html = await HttpClass.Client.GetStringAsync(HttpClass.Client.BaseAddress);
}
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
public static readonly string FirstPathLink = "https://" + Client.BaseAddress.Host + "/";
инициализация полей происходит раньше, чем вызов конструктора, перенесите в конструктор
public static readonly string FirstPathLink;
// ...
static HttpClass()
{
// ...
FirstPathLink = "https://" + Client.BaseAddress.Host + "/";
}
У нестатического поля и конструктора это работает точно так же.