Мы разрабатываем пакет NuGet, который клиент может использовать для добавления на свой сайт ASP.NET.
Код: Выделить всё
public interface IOurService {
void DoStuff();
}
public class OurService: IOurService {
public void DoStuff() {
//do things here
}
}
Тогда у нас есть метод регистрации наших сервисов в DI
Код: Выделить всё
public static void AddOurServices(this IServiceCollection services) {
services.AddSingleton();
}
Причина, по которой у нас есть интерфейс IOurService, заключается в том, что клиент хочет имитировать службу в своих модульных тестах. Если служба заблокирована, они говорят, что тестирование сложно.
Однако проблема в том, что они могут переопределить IOurService своей собственной реализацией через DI.
Код: Выделить всё
services.AddOurSerivces();
services.AddSingleton();
Поскольку нам нужен интерфейс, чтобы можно было имитировать сервис, нам нужно сохранить интерфейс и сделать его общедоступным. Однако существует ли какая-либо практика, позволяющая клиентам не заменять нашу реализацию через DI? Если они это сделают, и это не сработает или приведет к ошибкам, они создадут запросы в службу поддержки, и нам придется с этим разобраться. Было бы неплохо, если бы мы могли помешать им взломать библиотеку.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... -public-in