2016-04-26 4 views
1

Я хочу разделить платформо-независимую логику моей программы на C# в общий проект. Теперь я хотел бы скрыть репозитории, классы обслуживания и т. Д. Из моих проектов, ориентированных на платформу. Какой модификатор доступа я могу использовать? internal, похоже, не работает, поскольку они скомпилированы в один и тот же исполняемый файл (я думаю), и я не хочу, чтобы теги всех моих классов отмечены InternalsVisibleToAttribute.Класс доступен только для общего проекта?

Есть ли способ сделать классы в моем совместном проекте невидимыми для моего кода на платформе?

ответ

0

Нет, такой функции нет в C#. Если вы рассматриваете возможность маркировки каждого другого проекта с опцией InternalsVisibleToAttribute, это могло бы сделать трюк.

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

1

Есть только одно место, где вам нужно знать real тип, который вы пытаетесь указать - поставщик платформы. Все остальные должны просто использовать интерфейсы, которые являются платформоинвариантными.

Все реализации, специфичные для платформы, могут быть частными или внутренними для всего, что вам нужно - вам просто нужно обеспечить доступ провайдера. Ваше приложение будет использовать поставщика конкретной платформы для получения экземпляров, специфичных для платформы, и только когда-либо использующих интерфейсы, зависящие от платформы.

Что касается «компиляции в один исполняемый файл», это не очень важно. Скорее всего, вы полностью заботитесь о проверке времени компиляции, и это все еще присутствует независимо от того, как упаковывается окончательный исполняемый файл. Есть некоторые ограничения на отражение в частичной среде доверия, но к этому моменту вам все равно - вы находитесь только в ней для проверки компиляции, а не для безопасности во время выполнения.

Смежные вопросы