Редактировать : В этом ответе предполагается, что вы используете контейнер внедрения зависимостей, либо тот, который вы написали самостоятельно, либо тот, который вы получили из библиотеки.Если нет, то используйте DI-контейнер:)
Как узнать, как управлять объектом, который передается как зависимость, кроме того факта, что я создал класс, и ожидать, что все, кто его использует, играют хорошо иубедиться, что они используют правильный ресурс?!
По контракту
Устный контракт - вы пишете спецификацию проекта, которая говорит: «Ты не должен создавать это экземплярнепосредственно к классу "и" не передавайте ни один объект, полученный из контейнера внедрения зависимостей. Если вам нужно, передайте контейнер ".
Контракт компилятора - вы даете им контейнер внедрения зависимости, и они захватываютэкземпляр из него, с помощью абстрактного интерфейса.Если вы хотите использовать только один экземпляр, вы можете предоставить им именованный экземпляр, который они извлекают как с именем, так и с интерфейсом.
ISomething instance = serviceLocator.ResolveInstance<ISomething>(
"TheInstanceImSupposedToUse");
Вы также можете сделать все ваши конкретные классы приватными /внутренняя / что-у-вас, и предоставьте им только абстрактный интерфейс для работы.Это не позволит им создавать экземпляры самих классов.
// This can only be instantiated by you, but can be used by them via ISomething
private class ConcreteSomething : ISomething
{
// ...
}
Путем проверки кода
Вы делаете справедливыми стандарты кодирования и разработки для всей группы и убедитесь, чтоони понятны всем в группе.
Вы используете механизм контроля исходного кода и требуете проверки кода перед их регистрацией. Вы читаете их код на предмет того, на что они ссылаются, какие заголовки они включают, какие объекты ониэкземпляры и какие экземпляры они передают.
Если они нарушают ваши правила во время проверки кода, вы не разрешаете им регистрироваться, пока они не исправят свой код.По желанию, для повторных правонарушителей вы заставляете их платить вам доллар, заставляете их покупать обед или нанимаете другого подрядчика для их замены.Все, что хорошо работает в вашей группе:)