Как предотвратить вызовы метода от неизвестных надстроек - PullRequest
2 голосов
/ 16 декабря 2011

У меня есть базовый набор libs (framework), построенный поверх призмы, и он загружает другие модули, созданные другими сторонними разработчиками, которые должны использовать «рекомендуемый» подход, но нет встроенного механизма (насколько я могу судить), чтобызапрещать стороннему коду использовать методы, предназначенные только для внутреннего / основного использования.

Существует ли шаблон для проверки сборки вызывающего кода и проверки его на наличие какой-либо известной подписи, возможно?

Это для призмы, но я полагаю, будет применяться к любой платформе DI / IoC, гдеопределенные методы являются внутренними только

1 Ответ

2 голосов
/ 16 декабря 2011

Методы для внутреннего использования должны быть помечены как внутренние и поэтому невидимы для сторонних абонентов.Если вам нужно совместно использовать методы в своих сборках, используйте InternalsVisibleToAttribute.

РЕДАКТИРОВАТЬ

Чтобы сделать элементы недоступными для сторонних сборок, отметка члены внутренние .Это запрещает доступ сторонним сборкам.Я упомянул InternalsVisibleToAttribute из-за вероятности того, что

  • ваш внутренний код содержит более одной сборки
  • вы отметили некоторых участников как открытых для обеспечения доступа к сборке, но вы нене хочу, чтобы сторонний код имел доступ к этим членам.

Пример:

код для MyAssemblyA:

public static class SomeClass
{
    //this method is public because I want to be able to use it in MyAssemblyB
    public static void SomeMethodThatShouldBeInternal()
    {

    }
}

код для моей MyAssemblyB:

public class Program
{
    public static void Main()
    {
        SomeClass.SomeMethodThatShouldBeInternal();
    }
}

Чтобы сторонний код не имел доступа к SomeMethodThatShouldBeInternal(), измените объявление:

public static class SomeClass
{
    internal static void SomeMethodThatShouldBeInternal()
    {

    }
}

Теперь MyAssemblyB не будет компилироваться!Однако это можно исправить, добавив этот атрибут в MyAssemblyA:

[assembly: InternalsVisibleTo("MyAssemblyB")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...