基于 appconfig 在可实例化 class 上初始化持久值
Initialise persistant value on instantiable class based on appconfig
如何在 class 上创建每次创建时都保持不变的持久值?
public record StorageUrl
{
public string FileName { get; set;}
public string BaseAddress {get; set;}
public string FullPath => $"{BaseAddress}/{FileName}";
}
我希望 BaseAddress 的值来自配置文件。
我目前的方法是每次我想初始化一个 StorageUrl
时注入 IOptions<BaseAddressSettings>
有没有办法设置 BaseAddress
而不必每次都注入 IOptions
时间.
我想初始化 class 喜欢
var storageUrl = new StorageUrl { FileName = "fileName" };
我目前正在这样初始化
var storageUrl = new StorageUrl
{
FileName = "fileName",
BaseAddress = options.BaseAddress
};
除了从您的应用程序代码中这样做之外,确实没有办法将 IOptions
实例注入构造函数。
一个选项是创建一个 non-default 构造函数,它将 IOptions
实例作为参数。所以你的构造函数看起来像这样:
public class StorageUrl
{
public StorageUrl(string fileName, IOptions<BaseAddressSettings> options)
{
FileName = fileName;
BaseAddress = options.Value.BaseAddress;
}
}
您的应用程序代码将如下所示:
var storageUrl = new StorageUrl("fileName", options);
另一种选择是使用工厂。这主要在 class 有复杂的创建要求时有用。因此,对于此应用程序来说,它可能有点矫枉过正,但它可以帮助您的应用程序随着需求变得更加复杂而增长。
工厂服务:
public class StorageUrlFactory
{
private readonly IOptions<BaseAddressSettings> options;
public StorageUrlFactory(IOptions<BaseAddressSettings> options)
{
this.options = options;
}
public StorageUrl Create(string fileName)
{
return new StorageUrl
{
FileName = fileName,
BaseAddress = options.Value.BaseAddress
};
}
}
在您的应用程序代码中,您将使用 DI 注入工厂服务并调用它来创建这样的实例:
var storageUrl = storageUrlFactory.Create("fileName");
如何在 class 上创建每次创建时都保持不变的持久值?
public record StorageUrl
{
public string FileName { get; set;}
public string BaseAddress {get; set;}
public string FullPath => $"{BaseAddress}/{FileName}";
}
我希望 BaseAddress 的值来自配置文件。
我目前的方法是每次我想初始化一个 StorageUrl
时注入 IOptions<BaseAddressSettings>
有没有办法设置 BaseAddress
而不必每次都注入 IOptions
时间.
我想初始化 class 喜欢
var storageUrl = new StorageUrl { FileName = "fileName" };
我目前正在这样初始化
var storageUrl = new StorageUrl
{
FileName = "fileName",
BaseAddress = options.BaseAddress
};
除了从您的应用程序代码中这样做之外,确实没有办法将 IOptions
实例注入构造函数。
一个选项是创建一个 non-default 构造函数,它将 IOptions
实例作为参数。所以你的构造函数看起来像这样:
public class StorageUrl
{
public StorageUrl(string fileName, IOptions<BaseAddressSettings> options)
{
FileName = fileName;
BaseAddress = options.Value.BaseAddress;
}
}
您的应用程序代码将如下所示:
var storageUrl = new StorageUrl("fileName", options);
另一种选择是使用工厂。这主要在 class 有复杂的创建要求时有用。因此,对于此应用程序来说,它可能有点矫枉过正,但它可以帮助您的应用程序随着需求变得更加复杂而增长。
工厂服务:
public class StorageUrlFactory
{
private readonly IOptions<BaseAddressSettings> options;
public StorageUrlFactory(IOptions<BaseAddressSettings> options)
{
this.options = options;
}
public StorageUrl Create(string fileName)
{
return new StorageUrl
{
FileName = fileName,
BaseAddress = options.Value.BaseAddress
};
}
}
在您的应用程序代码中,您将使用 DI 注入工厂服务并调用它来创建这样的实例:
var storageUrl = storageUrlFactory.Create("fileName");