Как ввести переменную в каждый класс или метод в C # - PullRequest
0 голосов
/ 19 января 2019

У меня есть следующий код.

    [HttpGet]
    public async Task<List<TenantManagementWebApi.Entities.SiteCollection>> Get()
    {
        var tenant = await TenantHelper.GetActiveTenant();
        var siteCollectionStore = CosmosStoreFactory.CreateForEntity<TenantManagementWebApi.Entities.SiteCollection>();
        await siteCollectionStore.RemoveAsync(x => x.Title != string.Empty); // Removes all the entities that match the criteria
        string domainUrl = tenant.TestSiteCollectionUrl;
        string tenantName = domainUrl.Split('.')[0];
        string tenantAdminUrl =  tenantName + "-admin.sharepoint.com";

        KeyVaultHelper keyVaultHelper = new KeyVaultHelper();
        await keyVaultHelper.OnGetAsync(tenant.SecretIdentifier);

        using (var context = new OfficeDevPnP.Core.AuthenticationManager().GetSharePointOnlineAuthenticatedContextTenant(tenantAdminUrl, tenant.Email, keyVaultHelper.SecretValue))
        {
            Tenant tenantOnline = new Tenant(context);
            SPOSitePropertiesEnumerable siteProps = tenantOnline.GetSitePropertiesFromSharePoint("0", true);
            context.Load(siteProps);
            context.ExecuteQuery();
            List<TenantManagementWebApi.Entities.SiteCollection> sites = new List<TenantManagementWebApi.Entities.SiteCollection>();
            foreach (var site in siteProps)
            {
                if(site.Template.Contains("SITEPAGEPUBLISHING#0") || site.Template.Contains("GROUP#0"))
                {
                    string strTemplate= default(string);
                    if(site.Template.Contains("SITEPAGEPUBLISHING#0"))
                    {
                        strTemplate = "CommunicationSite";
                    };
                    if (site.Template.Contains("GROUP#0"))
                    {
                        strTemplate = "Modern Team Site";
                    };

                    try
                    {
                        Guid id = Guid.NewGuid();
                        Entities.SiteCollection sc = new Entities.SiteCollection()
                        {
                            Id = id.ToString(),
                            Owner = site.Owner,
                            Template = strTemplate,
                            Title = site.Title,
                            Active = false,
                            Url = site.Url
                        };

                        var added = await siteCollectionStore.AddAsync(sc);
                        sites.Add(sc);
                    }
                    catch (System.Exception ex)
                    {
                        throw ex;
                    }


                }
            }

            return sites;
        };
    }

Однако в следующих строках я повторяю их для каждого метода:

  var tenant = await TenantHelper.GetActiveTenant();
            var siteCollectionStore = CosmosStoreFactory.CreateForEntity<TenantManagementWebApi.Entities.SiteCollection>();
            await siteCollectionStore.RemoveAsync(x => x.Title != string.Empty); // Removes all the entities that match the criteria
            string domainUrl = tenant.TestSiteCollectionUrl;
            string tenantName = domainUrl.Split('.')[0];
            string tenantAdminUrl =  tenantName + "-admin.sharepoint.com";

            KeyVaultHelper keyVaultHelper = new KeyVaultHelper();
            await keyVaultHelper.OnGetAsync(tenant.SecretIdentifier);

У меня будет много контроллеров API в моем проекте

Есть ли простой способ (не рефакторинг как метод) сделать мой код чище и ввести нужные мне переменные, не копируя и не вставляя каждый раз?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...