Я трохи роздумував над тим, як ін’єкцію залежності можна краще інтегрувати безпосередньо в мову, схожу на C #. Я придумав потенційне рішення, про яке я хотів би почути вашу думку. Я не використовував багато рамок введення залежності, тому може бути щось, що я не помічаю
У будь-якому випадку ідея полягає в тому, щоб можна було оголосити властивості "ін'єкційними" за допомогою ключового слова. Коли об'єкт інстанціюється, і це властивість не ініціалізується через конструктор або ініціалізатор об'єкта, він запитує екземпляр цього типу властивості від якоїсь глобальної служби.
Аналогічно ви реєструєте обробники для різних типів цієї служби, щоб ви могли створити інстанціювання введеного типу властивості.
Перевага використання такого типу IMO архітектури полягає в тому, що він досить гнучкий і простий у використанні. Мінус полягає в тому, що може виникнути деяка накладна робота із описом до одиночної щоразу, коли ви ініціюєте клас, який має ін'єкцію.
Знову ж таки, це лише проблема для класів, які часто інстанціюються у високопродуктивних рішеннях, тому це не повинно бути великою проблемою. Можливо, ви могли б використовувати якусь фабрику в тих випадках.
Думка, питання, питання, кращі ідеї?
Код
public class SomeClass
{
public SomeClass()
{
//implicit behavior if Animal is not set in constructor or initializer
this.Animal = GlobalInjector.Get(this,typeof(Mammal))
}
public injectable Mammal Animal
{
get;
set;
}
}
GlobalInjector.Register(typeof(Mammal), () => return new Mammal(someParameter));