Скажем, у меня есть класс менеджераКаков наилучший способ ограничить доступ к методу во время компиляции?
public class Manager {
public Item Create() {
...
return new Item(...);
}
}
и у меня есть предмет класс:
public class Item {
[AllowCallBy(typeof(Manager))]
public Item(...) {
}
...
}
Теперь я хотел бы использовать самый простой и самый простой способ анализировать такие атрибуты, как AllowCallBy
в компилировать время и отображать ошибки или предупреждения. Если в этом конкретном случае класс, отличный от класса класса, пытается создать экземпляр Item
с помощью new Item(...)
Я хотел бы отобразить что-то вроде «не создавать экземпляр класса Item напрямую, вызывать диспетчер Manager.Create (...)».
Я полагаю, что хотя бы одна из систем: Roslyn, ReSharper, PostSharp или, может быть, что-то другое позволит мне сделать это или что-то очень близкое к тому, чего я пытаюсь достичь. Может ли кто-нибудь дать пример того, что использовать и как его использовать?
Это звучит как код запах, я не знаю, как вы бы достичь чего-то подобного во время компиляции, но вы должны пересмотреть свой дизайн. Может быть создан статический метод или конструктор класса Item, который принимает параметр типа Manager, чтобы убедиться, что каждый элемент связан с менеджером или чем-то одним из этих строк ... – Habib
Я считаю, что вы можете написать анализатор с Roslyn, который предупреждает вас, да. Если вы измените серьезность на Error, я полагаю, что это также помешало бы создать приложение. –
Проблема заключается не в том, чтобы остановить другого разработчика, который не согласен с вашей предпосылкой, просто удалить это предупреждение. Я думаю, лучше было бы либо удалить определенные требования из класса 'Item', создав конструктор' Item' с параметром менеджера, либо добавив больше подробностей к вашему вопросу, который лучше описывает проблему *, которую вы пытаетесь решить * – Sayse