私は過去数日間、かなりの数のIOC / DI / ninjectチュートリアルとビデオを見てきましたが、それでも私が要点を理解しているとは確信していません。
ほとんどの例では、彼らは通常、次のようなことを言います。剣や手裏剣が必要な場合はどうなるか、IWeaponを定義する必要があります。実際の武器の知識を戦士から切り離したいと思います。
したがって、必要なIWeaponをWarriorに注入し、Ninject(またはその他)に必要なクラスをIWeapon(剣や手裏剣など)に入れるようにさせますが、次に、デフォルトのバインディングを作成して、 IWeaponへの剣。
どちらを使用するかをどのように判断しますか?武器に名前付きバインディングを設定してからGetを設定できないため、名前付きバインディングを使用することはできません。
私の場合、キューから読んでいるメッセージがあります。これには、何を送信し、誰に送信するかについての必要な詳細が含まれます。
SMS、電子メール、iPhoneなどの実装でメッセージを送信する方法を知っているインターフェイスもあります。この場合、コードのどこかにスイッチを配置しないと、DIの使用方法を理解できません:-(
public interface INotify
{
void Send(Message msg);
}
public class Message
{
public Message(INotify notify)
{
_notify = notify;
}
public void Send()
{
_notify.Send(this);
}
readonly INotify _notify;
public string Type { get; set; }
public string Text{ get; set; }
public string Name { get; set; }
public string Number { get; set; }
public string Email { get; set; }
}
_kernel.Bind<INotify>().To<NotifyEmail>();
//kernel.Bind<INotify>().To<NotifySMS>().Named("sms");
//kernel.Bind<INotify>().To<NotifyAPNS>().Named("iphone");
var msg = _kernel.Get<Message>();
msg.Send();
必要なクラスを簡単にインスタンス化できるようにすることが重要ではありませんか?