คำถามติดแท็ก dependency-injection

รูปแบบการออกแบบเพื่อลดการเชื่อมต่อระหว่างส่วนประกอบโดยการฉีดเข้าสู่การพึ่งพาองค์ประกอบซอฟต์แวร์แบบไดนามิกที่จำเป็นต้องใช้ในการทำงาน

8
ฉันจะส่งค่าไปยังตัวสร้างบนบริการ wcf ของฉันได้อย่างไร
ฉันต้องการส่งผ่านค่าไปยังตัวสร้างในคลาสที่ใช้บริการของฉัน อย่างไรก็ตาม ServiceHost อนุญาตให้ฉันส่งในชื่อของประเภทที่จะสร้างเท่านั้นไม่ใช่อาร์กิวเมนต์ใดที่จะส่งผ่านไปยังตัวสร้าง ฉันต้องการที่จะผ่านในโรงงานที่สร้างวัตถุบริการของฉัน สิ่งที่ฉันพบจนถึงตอนนี้: WCF Dependency Injection Behaviorซึ่งเป็นมากกว่าสิ่งที่ฉันกำลังมองหาและดูเหมือนจะซับซ้อนเกินความต้องการของฉัน

7
Angularjs ลดแนวทางปฏิบัติที่ดีที่สุด
ฉันกำลังอ่าน http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.htmlและปรากฎว่า angularjs dependency injection มีปัญหาถ้าคุณลดขนาดจาวาสคริปต์ของคุณดังนั้นฉัน ฉันสงสัยว่าแทนที่จะเป็น var MyController = function($scope, $http) { $http.get('https://api.github.com/repos/angular/angular.js/commits') .then(function(response) { $scope.commits = response.data }) } คุณควรใช้ var MyController = ['$scope', '$http', function($scope, $http) { $http.get('https://api.github.com/repos/angular/angular.js/commits') .then(function(response) { $scope.commits = response.data }) }] โดยรวมแล้วฉันคิดว่าตัวอย่างที่สองนั้นมีไว้สำหรับ angularjs เวอร์ชันเก่า แต่ ... ฉันควรใช้วิธีฉีด (วิธีที่สอง) เสมอหรือไม่?

3
.NET Core DI วิธีการส่งผ่านพารามิเตอร์ไปยังตัวสร้าง
มีตัวสร้างบริการต่อไปนี้ public class Service : IService { public Service(IOtherService service1, IAnotherOne service2, string arg) { } } ทางเลือกในการส่งผ่านพารามิเตอร์โดยใช้กลไก. NET Core IOC คืออะไร _serviceCollection.AddSingleton<IOtherService , OtherService>(); _serviceCollection.AddSingleton<IAnotherOne , AnotherOne>(); _serviceCollection.AddSingleton<IService>(x=>new Service( _serviceCollection.BuildServiceProvider().GetService<IOtherService>(), _serviceCollection.BuildServiceProvider().GetService<IAnotherOne >(), "" )); มีวิธีอื่น ๆ ?

2
จะตั้งค่า DAGGER dependency injection ตั้งแต่เริ่มต้นในโครงการ Android ได้อย่างไร
วิธีใช้ Dagger? วิธีกำหนดค่า Dagger ให้ทำงานในโครงการ Android ของฉัน ฉันต้องการใช้ Dagger ในโปรเจ็กต์ Android ของฉัน แต่ฉันรู้สึกสับสน แก้ไข: Dagger2 ออกตั้งแต่ 2015 04 15 ด้วยและมันก็ยิ่งสับสน! [คำถามนี้เป็น "ต้นขั้ว" ที่ฉันเพิ่มเข้าไปในคำตอบเมื่อได้เรียนรู้เพิ่มเติมเกี่ยวกับ Dagger1 และเรียนรู้เพิ่มเติมเกี่ยวกับ Dagger2 คำถามนี้เป็นแนวทางมากกว่า "คำถาม"]

6
Google Guice กับ PicoContainer สำหรับ Dependency Injection
ทีมของฉันกำลังค้นคว้าเกี่ยวกับกรอบการพึ่งพาการฉีดขึ้นรูปและกำลังพยายามตัดสินใจระหว่างการใช้ Google-Guice และ PicoContainer เรากำลังมองหาหลายสิ่งในกรอบของเรา: รอยเท้ารหัสขนาดเล็ก - สิ่งที่ฉันหมายถึงรอยเท้ารหัสขนาดเล็กคือเราไม่ต้องการให้มีการฉีดรหัสการพึ่งพาทุกที่ในฐานรหัสของเรา หากเราจำเป็นต้องปรับโครงสร้างใหม่บนท้องถนนเราต้องการให้ง่ายที่สุด ประสิทธิภาพ - แต่ละเฟรมเวิร์กมีค่าใช้จ่ายเท่าใดเมื่อสร้างและฉีดวัตถุ? ใช้งานง่าย - มีเส้นการเรียนรู้ขนาดใหญ่หรือไม่? เราต้องเขียนโค้ดเพื่อให้ทำงานง่าย ๆ หรือไม่? เราต้องการให้มีการกำหนดค่าน้อยที่สุด ขนาดชุมชน - ชุมชนที่ใหญ่ขึ้นมักจะหมายความว่าโครงการจะยังคงได้รับการดูแลต่อไป เราไม่ต้องการใช้เฟรมเวิร์กและต้องแก้ไขข้อบกพร่องของเราเอง) นอกจากนี้คำถามใด ๆ ที่เรามีระหว่างทางก็สามารถ (หวังว่า) จะได้รับคำตอบจากชุมชนผู้พัฒนา / ผู้ใช้ของเฟรมเวิร์ก การเปรียบเทียบสองกรอบกับเกณฑ์ที่ระบุไว้จะได้รับการชื่นชมอย่างมาก ประสบการณ์ส่วนตัวใด ๆ ที่ช่วยเปรียบเทียบทั้งสองอย่างก็จะเป็นประโยชน์อย่างยิ่ง ข้อจำกัดความรับผิดชอบ: ฉันค่อนข้างใหม่สำหรับการฉีดพึ่งพาดังนั้นขอโทษที่ไม่มีใครรู้ว่าฉันถามคำถามที่ไม่ตรงกับการสนทนานี้

4
การฉีด Symfony 2 EntityManager ในบริการ
ฉันได้สร้างบริการของตัวเองและจำเป็นต้องฉีด EntityManager หลักคำสอน แต่ฉันไม่เห็นว่า__construct()มีการเรียกใช้บริการของฉันและการฉีดไม่ได้ผล นี่คือรหัสและการกำหนดค่า: <?php namespace Test\CommonBundle\Services; use Doctrine\ORM\EntityManager; class UserService { /** * * @var EntityManager */ protected $em; public function __constructor(EntityManager $entityManager) { var_dump($entityManager); exit(); // I've never saw it happen, looks like constructor never called $this->em = $entityManager; } public function getUser($userId){ var_dump($this->em ); // outputs …

9
อะไรคือความแตกต่างระหว่าง Strategy Pattern และ Dependency Injection?
รูปแบบกลยุทธ์และ Dependency Injection ช่วยให้เราสามารถตั้งค่า / ฉีดวัตถุในขณะทำงานได้ อะไรคือความแตกต่างระหว่าง Strategy Pattern และ Dependency Injection?

3
AngularJS seed: การใส่ JavaScript ลงในไฟล์แยกกัน (app.js, controllers.js, directives.js, filters.js, services.js)
ฉันใช้แม่แบบเมล็ดเชิงมุมเพื่อจัดโครงสร้างแอปพลิเคชันของฉัน เริ่มแรกฉันใส่โค้ด JavaScript ทั้งหมดลงในไฟล์เดียว, main.js. ไฟล์นี้มีการประกาศโมดูลตัวควบคุมคำสั่งตัวกรองและบริการของฉัน แอปพลิเคชันทำงานได้ดีเช่นนี้ แต่ฉันกังวลเกี่ยวกับความสามารถในการปรับขนาดและการบำรุงรักษาเนื่องจากแอปพลิเคชันของฉันมีความซับซ้อนมากขึ้น ฉันสังเกตเห็นว่าเทมเพลต angular-seed มีไฟล์แยกกันสำหรับแต่ละไฟล์ดังนั้นฉันจึงพยายามกระจายรหัสของฉันจากmain.jsไฟล์เดียวไปยังไฟล์อื่น ๆ ที่กล่าวถึงในชื่อสำหรับคำถามนี้และพบในapp/jsไดเร็กทอรีของangularแม่แบบเมล็ด คำถามของฉันคือฉันจะจัดการการอ้างอิงเพื่อให้แอปพลิเคชันทำงานได้อย่างไร เอกสารที่มีอยู่ที่พบที่นี่ไม่ชัดเจนในเรื่องนี้เนื่องจากแต่ละตัวอย่างที่ให้มาแสดงไฟล์ต้นฉบับ JavaScript ไฟล์เดียว ตัวอย่างของสิ่งที่ฉันมีคือ: app.js angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.controllers']); controllers.js angular.module('myApp.controllers', []). controller('AppCtrl', [function ($scope, $http, $filter, MyService) { $scope.myService = MyService; // found in services.js // other functions... } ]); filter.js angular.module('myApp.filters', []). filter('myFilter', [function …

7
ฉันสามารถส่งพารามิเตอร์ตัวสร้างไปยังเมธอด Unity's Resolve () ได้หรือไม่
ฉันใช้ Unity ของ Microsoft สำหรับการฉีดพึ่งพาและฉันต้องการทำสิ่งนี้: IDataContext context = _unityContainer.Resolve<IDataContext>(); var repositoryA = _unityContainer.Resolve<IRepositoryA>(context); //Same instance of context var repositoryB = _unityContainer.Resolve<IRepositoryB>(context); //Same instance of context IDataContext context2 = _unityContainer.Resolve<IDataContext>(); //New instance var repositoryA2 = _unityContainer.Resolve<IRepositoryA>(context2); RepositoryAและRepositoryBทั้งสองมีตัวสร้างที่รับIDataContextพารามิเตอร์และฉันต้องการให้ Unity เริ่มต้นที่เก็บด้วยบริบทที่ฉันส่งผ่าน โปรดทราบIDataContextว่าไม่ได้ลงทะเบียนกับ Unity (ฉันไม่ต้องการ 3 อินสแตนซ์IDataContext)

7
รูปแบบการออกแบบ Dependency Injection & Singleton
เราจะระบุได้อย่างไรว่าเมื่อใดควรใช้รูปแบบการฉีดพึ่งพาหรือรูปแบบซิงเกิลตัน ฉันได้อ่านในเว็บไซต์จำนวนมากที่พวกเขาพูดว่า "ใช้การฉีดขึ้นข้อมูลบนรูปแบบซิงเกิลตัน" แต่ฉันไม่แน่ใจว่าฉันเห็นด้วยกับพวกเขาทั้งหมดหรือไม่ สำหรับโครงการขนาดเล็กหรือขนาดกลางของฉันฉันเห็นการใช้รูปแบบซิงเกิลตันอย่างตรงไปตรงมา ตัวอย่างเช่น Logger ฉันสามารถใช้Logger.GetInstance().Log(...) แต่แทนที่จะเป็นแบบนี้ทำไมฉันต้องฉีดทุกคลาสที่ฉันสร้างด้วยอินสแตนซ์ของคนตัดไม้?

7
ไม่รวม @Component จาก @ComponentScan
ฉันมีองค์ประกอบที่ฉันต้องการแยกออกจาก@ComponentScanรายการเฉพาะ@Configuration: @Component("foo") class Foo { ... } มิฉะนั้นดูเหมือนว่าจะปะทะกับคลาสอื่น ๆ ในโครงการของฉัน ฉันไม่เข้าใจการชนกันอย่างถ่องแท้ แต่ถ้าฉันแสดงความคิดเห็นใน@Componentคำอธิบายประกอบสิ่งต่างๆจะเป็นไปอย่างที่ฉันต้องการ แต่โปรเจ็กต์อื่น ๆ ที่ต้องอาศัยไลบรารีนี้คาดว่าคลาสนี้จะจัดการโดย Spring ดังนั้นฉันจึงขอข้ามไปเฉพาะในโปรเจ็กต์ของฉัน ฉันลองใช้@ComponentScan.Filter: @Configuration @EnableSpringConfigured @ComponentScan(basePackages = {"com.example"}, excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)}) public class MySpringConfiguration {} แต่ดูเหมือนจะไม่ได้ผล ถ้าฉันลองใช้FilterType.ASSIGNABLE_TYPEฉันได้รับข้อผิดพลาดแปลก ๆ เกี่ยวกับการไม่สามารถโหลดคลาสที่ดูเหมือนสุ่มได้: เกิดจาก: java.io.FileNotFoundException: class path resource [junit / framework / TestCase.class] ไม่สามารถเปิดได้เนื่องจากไม่มีอยู่ ฉันยังลองใช้type=FilterType.CUSTOMดังต่อไปนี้: class ExcludeFooFilter implements TypeFilter …

6
เปิดใหม่และเพิ่มการอ้างอิงให้กับแอปพลิเคชันที่บูตแล้ว
มีวิธีฉีดการพึ่งพาในช่วงปลายให้กับโมดูลเชิงมุมที่บูตแล้วหรือไม่? นี่คือสิ่งที่ฉันหมายถึง: สมมติว่าฉันมีแอปเชิงมุมทั่วทั้งไซต์ซึ่งกำหนดเป็น: // in app.js var App = angular.module("App", []); และในทุกหน้า: <html ng-app="App"> ต่อมาฉันกำลังเปิดแอปอีกครั้งเพื่อเพิ่มตรรกะตามความต้องการของหน้าปัจจุบัน: // in reports.js var App = angular.module("App") App.controller("ReportsController", ['$scope', function($scope) { // .. reports controller code }]) ตอนนี้พูดได้ว่าหนึ่งในบรรดาบิตตามความต้องการของตรรกะยังต้องพึ่งพาตัวเอง (เช่นngTouch, ngAnimate, ngResourceฯลฯ ) ฉันจะแนบเข้ากับแอพพื้นฐานได้อย่างไร ดูเหมือนจะไม่ได้ผล: // in reports.js var App = angular.module("App", ['ui.event', 'ngResource']); // <-- …

2
จะดึงอินสแตนซ์ที่มีคำอธิบายประกอบจากหัวฉีดของ Guice ได้อย่างไร
สมมติว่าฉันมีโมดูล: Module extends AbstractModule { @Override protected void configure() { bind(String.class). annotatedWith(Names.named("annotation")). toInstance("DELIRIOUS"); } } และฉันต้องการทดสอบโมดูลและตรวจสอบว่ามันฉีดค่าที่ถูกต้องในStringฟิลด์ที่มีคำอธิบายประกอบNames.named("annotation")โดยไม่ต้องมีคลาสและฟิลด์ แต่ได้รับค่าโดยตรงจากหัวฉีด: @Test public void test() { Injector injector = Guice.createInjector(new Module()); // THIS IS NOT GOING TO WORK! String delirious = injector.getInstance(String.class); assertThat(delirious, IsEqual.equalTo("DELIRIOUS"); }

3
Reader Monad สำหรับ Dependency Injection: การอ้างอิงหลายครั้งการเรียกซ้อนกัน
เมื่อถูกถามเกี่ยวกับ Dependency Injection ใน Scala คำตอบจำนวนมากชี้ไปที่การใช้ Reader Monad ไม่ว่าจะเป็นคำตอบจาก Scalaz หรือเพียงแค่หมุนของคุณเอง มีจำนวนของบทความที่ชัดเจนมากอธิบายพื้นฐานของวิธีการ (เช่นมีการพูดคุย Runar ของ , บล็อกของเจสัน ) แต่ผมไม่ได้จัดการเพื่อหาตัวอย่างที่สมบูรณ์มากขึ้นและผมไม่เห็นข้อดีของวิธีการที่มากกว่าเช่นขึ้น DI "manual" แบบดั้งเดิม (ดูคำแนะนำที่ฉันเขียน ) ส่วนใหญ่ฉันอาจพลาดประเด็นสำคัญบางอย่างดังนั้นคำถามนี้ ตัวอย่างเช่นสมมติว่าเรามีคลาสเหล่านี้: trait Datastore { def runQuery(query: String): List[String] } trait EmailServer { def sendEmail(to: String, content: String): Unit } class FindUsers(datastore: Datastore) { def inactive(): …

1
วิธีการตั้งค่าการตั้งค่าแอพใน. Net Core 3 Worker Service
ฉันได้ดูบทเรียนจำนวนหนึ่งและคำถาม SO (เช่นการตั้งค่าแอพ. Net Core ) เกี่ยวกับการอ่าน appsettings.json ใน. Net Core 3 และฉันไม่สามารถหาคำแนะนำใด ๆ เกี่ยวกับวิธีใช้เมื่อจัดการกับบริการของผู้ปฏิบัติงาน ไม่มีวิธีการเริ่มต้น แต่ฉันมี Program.cs ด้วยวิธีการหลัก: public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); } ฉันจะอ่านเกี่ยวกับไฟล์ appsettings.json ใน Worker Service …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.