Доступ к методам класса, имеющего конструктор с IOptions <> в c# NETCore - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть файл класса: BandUtil.cs

public class BandUtil
    {
        private readonly IOptions<BandSettings> _bandOptions;

        public BandUtil (IOptions<BandSettings> bandOptions)
        {
            _bandOptions= bandOptions;
        }

        public BandSettings BandValues()
        {
            return _bandOptions.Value;
        }

        public Client Client()
        {
             return new Client(BandValues().UserID, BandValues().ApiToken,BandValues().ApiSecret);
        }
    }

У меня есть другой класс BandTest.cs

В этом классе BandTest.cs , я пытаюсь получить доступ к Client () метод из BandUtil class .

Я пробовал несколько вариантов, но не смог решить Это. Может кто-нибудь, пожалуйста, подскажите мне об этом?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Вам нужно либо

  1. изменить имя конструктора в соответствии с именем класса:

    public BandUtil(IOptions<BandSettings> bandOptions)

    или

  2. присвойте ему void тип возвращаемого значения, чтобы вместо него использовать метод установки:

    public void BandWidthClient(IOptions<BandSettings> bandOptions)

Если вы выберете вариант 1, добавьте это в ваш BandTest.cs файл:

var bandSettings = new BandSettings();
var bandOptions = new OptionsWrapper<BandSettings>(bandSettings);
var bandUtil = new BandUtil(bandOptions);
var client = bandUtil.Client();

Если вы выберете вариант 2, добавьте это в ваш BandTest.cs файл:

var bandUtil = new BandUtil();
var bandSettings = new BandSettings();
var bandOptions = new OptionsWrapper<BandSettings>(bandSettings);
bandUtil.BandWidthClient(bandOptions);
var client = bandUtil.Client();
0 голосов
/ 23 апреля 2020

Первая проблема, которую я вижу, заключается в том, что конструктор (BandWithClient) не соответствует имени класса (BandUtil).

Я не уверен, что еще не так, но вот быстрое и грязное воссоздание, показывающее, как можно использовать Client ()

using System;

public class IOptions<T> {
    public T Value { get; set;  }
}

public class BandSettings { 
    public string UserID { get; set; }
    public string ApiToken { get; set; }
    public string ApiSecret { get; set; }
}

public class Client {
    public Client(string userId, string apiToken, string secret) { 
    }
}

public class BandUtil
{
    private readonly IOptions<BandSettings> _bandOptions;

    public BandUtil (IOptions<BandSettings> bandOptions)
    {
        _bandOptions= bandOptions;
    }

    public BandSettings BandValues()
    {
        return _bandOptions.Value;
    }

    public Client Client()
    {
        return new Client(BandValues().UserID, BandValues().ApiToken, BandValues().ApiSecret);
    }
}

public class Program
{
    public static void Main()
    {
        var bandSettings = new BandSettings {
            UserID = "Foo",
            ApiToken = "Baz",
            ApiSecret = "Bar"
        };

        var options = new IOptions<BandSettings> { Value = bandSettings };      
        var util = new BandUtil(options);
        var client = util.Client();         
    }
}

Вот dotnetfiddle с кодом выше: https://dotnetfiddle.net/srx9kM

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