Това може да изглежда очевидно за повечето хора, но аз просто се опитвам да потвърдя, че инжектирането на зависимост (DI) разчита на използването на интерфейси.
По-конкретно, в случай на клас, който има определен интерфейс като параметър в своя конструктор или определен интерфейс, дефиниран като свойство (известен още като Setter), DI рамката може да предаде екземпляр на конкретен клас, за да задоволи нуждите на този интерфейс в този клас. (Извинявам се, ако това описание не е ясно. Имам проблем да го опиша правилно, защото терминологията/концепциите все още са малко нови за мен.)
Причината да попитам е, че в момента имам клас, който има някаква зависимост. Не толкова зависимост от обект, а URL. Класът изглежда така [C#]:
using System.Web.Services.Protocols;
public partial class SomeLibraryService : SoapHttpClientProtocol
{
public SomeLibraryService()
{
this.Url = "http://MyDomainName.com:8080/library-service/jse";
}
}
Класът SoapHttpClientProtocol има публично свойство, наречено Url
(което е обикновен стар „низ“) и конструкторът тук го инициализира до твърдо кодирана стойност.
Мога ли да използвам DI рамка, за да инжектирам различна стойност при изграждането? Мисля, че не, тъй като this.Url
не е нещо като Interface
; това е String
.
[Между другото, кодът по-горе беше „автоматично генериран от wsdl“, според коментарите в кода, с който работя. Така че не искам особено да променям този код, въпреки че не виждам себе си да го генерирам отново. Така че може би промяната на този код е добре.]
Мога да се видя как правя алтернативен конструктор, който приема низ като параметър и инициализира this.Url
по този начин, но не съм сигурен, че това е правилният подход по отношение на поддържането на слабо свързано разделяне на проблемите. (SoC)
Някакви съвети за тази ситуация?