Tôi đã đọc về các khung điều khiển Inversion của Kiểm soát và tôi chỉ đang chơi xung quanh với câu hỏi: "Tại sao tôi lại cần một khung làm việc này?"Tại sao sử dụng khung công tác IoC
Đừng hiểu lầm câu hỏi của tôi ... mẫu là thứ mà chúng tôi lập trình sử dụng thường xuyên nhưng ... một khuôn khổ đầy đủ tính năng để làm điều đó?
Tôi phải thiếu điều gì đó và đó là lý do tôi đăng câu hỏi. Tôi đã nhìn thấy rất nhiều ví dụ trên web và tôi không hiểu. mi tâm bị chặn ý tưởng có thể.
Chỉ cần có một cái nhìn vào ví dụ trang của Ninject Trang chủ:
public class Samurai {
public IWeapon Weapon { get; private set; }
public Samurai(IWeapon weapon) {
Weapon = weapon;
}
}
public class WarriorModule : NinjectModule {
public override void Load() {
Bind<IWeapon>.To<Sword>();
}
}
Lớp "Samurai" là ok với tôi. Khung "NinjectModule" có vẻ không cần thiết đối với tôi.
tôi giả sử sau này trong mã chúng tôi sẽ tạo mới "Samurai" trường hợp đi qua trong những trường hợp "Thanh kiếm" với nó, một cái gì đó như:
Samurai theWarrior = new Samurai(WarriorModule.GetInstance(IWeapon));//no coupling
mà có thể được thay thế bằng:
Samurai theWarrior = new Samurai(new Sword());//still no coupling
hoặc
Samurai theWarrior = new Samurai(GetWeaponFromXML());//no coupling yet
của phần tôi đang thiếu gì? Bạn có thể vui lòng nói về một số kịch bản mà Ioc khuôn khổ có thể cần thiết trong ứng dụng của tôi?
Cảm ơn.
CẬP NHẬT SAU 4 TRẢ LỜI: Tôi thực sự thích tất cả các câu trả lời tôi nhận được từ các bạn. Tôi chỉ đọc bài này dependency-injection-dissection/ nơi anh chàng sử dụng nó cho Unit Testing và liên kết StackOverflow mà bạn vừa cung cấp và Yeah, tôi đã bỏ lỡ phần phức tạp lớn lớn, vì vậy hãy tùy chỉnh bản thân mình để sử dụng một khung công tác IoC. Cảm ơn một lần nữa.
Tôi sẽ bỏ phiếu cho câu trả lời của bạn nhưng tôi chỉ nhận được thông báo màu cam nói rằng tôi không thể.
Nhờ người đã đánh dấu mã tôi đã đăng.
tôi sẽ đề nghị chỉnh sửa câu hỏi của bạn để làm cho khối mã khối mã thực tế, bởi một trong hai 'làm nổi bật và nhấn Ctrl-k 'hoặc bằng cách chèn bốn dấu cách trước mỗi dòng mã. – jcolebrand
'new Samurai (new Sword()); // vẫn không có coupling' Có một khớp nối chặt chẽ ở đây, bạn sử dụng' new'. Khi bạn refactor rằng, bạn sẽ phải thay đổi mọi nơi mà instantiates một Sword. – nos
bản sao có thể có của [Tại sao tôi cần một thùng chứa IoC thay vì mã DI đơn giản?] (Http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed -to-straightforward-di-code) –