Cóż, nie wiem, czy "silne nazewnictwo" jest właściwym terminem, ale chcę to zrobić w następujący sposób.Czy mogę używać Ninject ConstructorArguments z silnym nazewnictwem?
Obecnie używam ConstructorArgument jak np. to:
public class Ninja
{
private readonly IWeapon _weapon;
private readonly string _name;
public Ninja(string name, IWeapon weapon)
{
_weapon = weapon;
_name = name;
}
// ..more code..
}
public void SomeFunction()
{
var kernel = new StandardKernel();
kernel.Bind<IWeapon>().To<Sword>();
var ninja = kernel.Get<Ninja>(new ConstructorArgument("name", "Lee"));
}
Teraz, jeśli zmienić nazwę parametru „name” (na przykład za pomocą ReSharper) ConstructorArgument nie zostaną zaktualizowane, a ja dostać błąd wykonania podczas tworzenia Ninja. Aby to naprawić, muszę ręcznie znaleźć wszystkie miejsca, dla których określam ten parametr za pomocą ConstructorArgument i zaktualizować go. Nic dobrego, aw pewnym momencie skazuję się na porażkę, mimo że mam dobry zasięg testów. Zmiana nazwy powinna być tanią operacją.
Czy istnieje sposób, w jaki można zamiast tego podać odniesienie do parametru - taki, że jest aktualizowany po zmianie nazwy parametru?
Używam tego tylko z komponentami, które posiadam, więc nie zmienią się nagle, chyba że im to powiem. Ale nie chcę, aby moje ręce były związane podczas refaktoryzacji ... – stiank81
Rozumiem, że jeden zdecydowanie nie chciałby, żeby twój kod był kruchy, gdybyś musiał pozwać ConstructorArgument (stąd ja + 1 pytanie). Chciałem powiedzieć, że jeśli posiadasz kod, prawdopodobnie możesz zrobić to lepiej niż opierać się na ConstructorArgument w pierwszej kolejności [podczas gdy nie posiadasz kodu, istnieją uzasadnione powody, aby tego dokonać, ale negatywne skutki zostałyby złagodzone stopień przez to, że jest mniej prawdopodobne, aby się zmienić]. –
Nie martw się - Rozumiem pytanie i nie próbuję podać ci innej odpowiedzi, która nie rozwiąże problemu, który sam wymyśliłeś. (Nie zadałbym sobie trudu odpowiadania, gdyby nie fakt, że czułem, że nie słyszałeś odpowiedzi na pytanie.) –