Разница между AddScoped, AddTransient и AddSingleton - PullRequest
0 голосов
/ 03 октября 2019

Я хочу проверить, как отличаются AddScoped, AddTransient и AddSingleton. Для этого я создал сервис и два субсервиса для сравнения их хеш-кодов. Но я не понимаю, как я могу вызвать эти сервисы с помощью Dependency Injection?

MainService.cs

public class MainService
    {
        public MainService(SubService1 s1, SubService2 s2)
        {}
    }

    public class SubService1
    {}

    public class SubService2
    {}

AppMutation.cs

public class AppMutation : ObjectGraphType
    {
        public AppMutation(ApplicationContext data, MainService mainservice)
        {
            Field<AuthorType>(
                "deleteAuthor",
                    arguments: new QueryArguments(
                        new QueryArgument<NonNullGraphType<IntGraphType>> { Name = "id" }
                ),
                resolve: context =>
                {
                    var id = context.GetArgument<int>("id");

                    if (data.Authors.Any(b => b.Id == id))
                    {
                        var author = data.Authors.FirstOrDefault(b => b.Id == id);

                        // How can I call services using Dependency Injection?
                        string mainServiceString = mainservice.GetHashCode().ToString();

                        data.Authors.Remove(author);
                        data.SaveChanges();
                        return author;
                    }

                    return null;
                });
        }
    }

Startup.cs

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Here I connect services
        services.AddScoped<MainService>();
        services.AddScoped<SubService1>();
        services.AddTransient<SubService2>();
    }
}
...