Насколько я знаю, нет никакого способа применить то, что вы просите, непосредственно к установщику свойств, так как он не знает, откуда был инициирован вызов.Тем не менее, вы можете собрать что-нибудь вместе, используя методы-мутаторы:
public class Customer
{
...
public string Name
{
get;
private set;
}
public void SetName(string callingControlName, string newName)
{
// you'd use TypeOf the same way to pass in callingControlName
if(TypeOf(this).Name + "UserControl" == callingControlName)
this.Name = newName;
}
...
}
Обратите внимание, что это смешно тесно связано и плохая практика проектирования, но это должно делать то, что вы хотите, при условии, что вы строго придерживаетесь соглашений об именах, изложенныхв вопросе (Customer
соответствует 1: 1 с CustomerUserControl
).Кроме того, я не просто статически сравнивал callingControlName
с "CustomerUserControl"
, чтобы получить небольшое улучшение в удобстве обслуживания, если вы хотите сделать что-то вроде переименования класса CustomerUserControl.Также важно отметить тот факт, что это легко устранить, позвонив по номеру Customer.SetName("CustomerUserControl","badName")
.Надеюсь, вы не раскрываете это кодерам, которые будут делать подобные вещи, но это вполне возможно.
Реальная проблема здесь в том, что ваш бизнес-уровень не должен зависеть от вашего уровня представления.Зачем вам нужно ограничивать доступ к конкретному UserControl?Если у вас есть реальная необходимость (и я не могу придумать ни одного), чтобы бизнес-свойство set
было доступно только из определенного класса пользовательского интерфейса, тогда требуется существенный редизайн вашего приложения.