如何获取动作所在的类的名称?

问题描述 投票:0回答:1

我有一个类似的方法

private async Task LoadInitialDataAsync(Func<Task> action, string name)
{
    logger.LogTrace($"Loading {name}...");
    await action.Invoke();
}

我怎样才能避免像这样传递我正在加载的内容:

await LoadInitialDataAsync(
    serviceProvider.GetRequiredService<NeighboursMilk>().LoadInitialDataAsync,
    "neighbours milk");

await LoadInitialDataAsync(
    serviceProvider.GetRequiredService<MyOldSockCollection>().LoadInitialDataAsync,
    "My old sock collection");

await LoadInitialDataAsync(
    serviceProvider.GetRequiredService<NewJamesBondDvds>().LoadInitialDataAsync,
    "New james bond dvds");
c# asp.net-core
1个回答
0
投票

以下测试获取“task”与“NeighboursMilk”同一个类中的名称。

    public class Test
    {
        private readonly ILogger logger;
        private readonly IServiceProvider serviceProvider;

        public Test(ILogger<Test> logger,IServiceProvider serviceProvider)
        {
            this.logger = logger;
            this.serviceProvider = serviceProvider;
        }
        private async Task LoadInitialDataAsync(Func<Task> action)
        {
            var name = action.GetMethodInfo().DeclaringType.Name;

            logger.LogInformation($"Loading {name}...");
            await action.Invoke();
        }
        public async Task Load()
        {
            await LoadInitialDataAsync(serviceProvider.GetRequiredService<NeighboursMilk>().LoadInitialDataAsync);
        }
    }
    public class NeighboursMilk
    {
        public Func<Task> LoadInitialDataAsync = myTask;

        public static Task myTask()
        {
            return Task.CompletedTask;  
        }
    }

试运行

test.Load()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.