Как обновить свойство сервера при обновлении свойства клиента - PullRequest
0 голосов
/ 18 марта 2019

У меня есть два равных класса по обе стороны связи WCF:

public class UserInfo
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    ....
}

Обновление класса одного клиента Мне нужно обновить класс службы.Я могу реализовать службу WCF с помощью методов:

public interface IUserInfoUpdateContract
{
   void UpdateFirstName(string value);
   void UpdateLastName(string value);
   void UpdateAge(string value);
   ...
}

Но есть ли альтернативный способ динамического обновления свойств?Например:

public interface IUserInfoUpdate
{
   void UpdateProperty(string propertyName, object propertyValue);
}

Использование на стороне клиента:

public class UserInfo
{
    private string _firstName;
    public string FirstName 
    { 
        get { return _firstName; }
        set 
        { 
            _firstName = value;
            wcfClient.UpdateProperty(nameof(FirstName), FirstName);
        }
    }
}

Есть ли у меня какие-либо варианты, как динамически обновлять свойства на стороне службы без отражения?

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Если вы хотите применить только к UserInfo, а не к какому-либо типу, вы можете использовать if else, так что вам нужен только один метод на стороне вашего сервера.

 public void UpdateProperty(string propertyName,object propertyValue)
    {
        UserInfo userInfo = new UserInfo(); // use your userInfo
        if(propertyName == "FirstName")
        {
            userInfo.FirstName = propertyValue as string;
        }
        if(propertyName == "Age")
        {
            userInfo.Age = (int)propertyValue;
        }
    }
0 голосов
/ 18 марта 2019

Поскольку вы не хотите использовать отражение, вы можете сделать следующее. Добавление внутреннего Dictionary к UserInfo содержит все значения свойств, и тогда можно будет ссылаться на эти значения по имени свойства string

public class UserInfo
{
    private IDictionary<string, object> _dictionary = new Dictionary<string, object>();

    public string FirstName
    {
        get
        {
            object value;
            return _dictionary.TryGetValue(nameof(FirstName), out value) ? (string)value : null;
        }
        set
        {
            _dictionary[nameof(FirstName)] = value;
        }
    }


    public string LastName
    {
        get
        {
            object value;
            return _dictionary.TryGetValue(nameof(LastName), out value) ? (string)value : null;
        }
        set
        {
            _dictionary[nameof(LastName)] = value;
        }
    }

    public int Age
    {
        get
        {
            object value;
            return _dictionary.TryGetValue(nameof(Age), out value) ? (int)value : 0;
        }
        set
        {
            _dictionary[nameof(Age)] = value;
        }
    }

    public object this[string property]
    {
        set
        {
            //todo: validation if needed
            _dictionary[property] = value;
        }
    }

Использование

var info = new UserInfo();
info.FirstName = "hello";
info["LastName"] = "Last";
...