public InstanceConfigurationBuilderItem(
Func<Object?> createInstanceFunc,
MethodInfo methodInfo,
Dictionary<string, Object?> parameters
)Public Sub New (
createInstanceFunc As Func(Of Object),
methodInfo As MethodInfo,
parameters As Dictionary(Of String, Object)
)public:
InstanceConfigurationBuilderItem(
Func<Object^>^ createInstanceFunc,
MethodInfo^ methodInfo,
Dictionary<String^, Object^>^ parameters
)new :
createInstanceFunc : Func<Object> *
methodInfo : MethodInfo *
parameters : Dictionary<string, Object> -> InstanceConfigurationBuilderItemФункция, создающая экземпляр класса, для которого выполняется метод MethodInfo для получения хранилища конфигурационного файла.
Если экземпляр реализует интерфейс IAsyncInitializable, то он будет инициализирован перед использованием.
Если экземпляр реализует интерфейс IAsyncDisposable или IDisposable, то он будет освобождён после использования.
Метод, выполняемый для получения хранилища конфигурационного файла.
Должен возвращать Dictionary<string, object?>? либо явно, либо асинхронно как TaskTResult или ValueTaskTResult.
Первым параметром метод получает объект из директивы IncludeConfigurationDirective. Вторым опциональным параметром метод получает значение Storage, третьим опциональным параметром - Info, а четвёртым опциональным параметром - CancellationToken.
Пример класса в отдельной сборке, реализующего метод Invoke:
public class MyLoaderClass
{
public async ValueTask<Dictionary<string, object?>?> Invoke(
Dictionary<string, object?> parameters,
Dictionary<string, object?> storage,
Dictionary<string, object?> info,
CancellationToken cancellationToken = default)
{
// parameters - json object from ".include" directive
// storage - current storage before including, same as context.Storage
// info - additional info, same as context.Info
if (parameters.TryGet<object>("uri") is string uri)
{
// load configuration from uri
return new Dictionary<string, object?> { ["Result"] = 42L };
}
return null;
}
}Пример содержимого app.json для использования такого загрузчика из сборки MyLibrary.dll:
{
".include": [
{
".loader.type": "MyNamespace.MyLoaderClass, MyLibrary",
"uri": "https://my.configuration.server/files/app.json"
}
]
}