গুইস এর অ্যাসিস্টড ইনজেক্ট কীভাবে ব্যবহার করবেন?


85

আমি https://github.com / গুগল / গুইস / উইকি / অ্যাসিস্টড ইনজেক্ট পড়েছি , তবে এটি কীভাবে অ্যাসিস্টড ইন্জেক্ট আর্গুমেন্টের মানগুলিতে পাস করতে হবে তা বলে না। ইনজেক্টর.গেট ইনস্ট্যান্স () কলটি দেখতে কেমন হবে?


সম্পর্কিত, নীচের উত্তরগুলি এমন কোনও ক্ষেত্রে কাভার করছে না যেখানে তিনি একই ধরণের একাধিকবার ব্যবহৃত হয়। stackoverflow.com/questions/23553865/…
আলেকজান্ডার ওহ

উত্তর:


171

এর javadoc চেক করুন FactoryModuleBuilder বর্গ।

AssistedInjectআপনি Factoryনিজের দ্বারা কোডিংয়ের পরিবর্তে ক্লাসের জন্য ডায়নামিকভাবে কনফিগার করতে পারবেন । এটি প্রায়শই কার্যকর হয় যখন আপনার কোনও অবজেক্টের নির্ভরতা থাকে যা ইনজেকশন দেওয়া উচিত এবং কিছু পরামিতি যা অবজেক্ট তৈরির সময় নির্দিষ্ট করতে হবে।

ডকুমেন্টেশন থেকে উদাহরণ a RealPayment

public class RealPayment implements Payment {
   @Inject
   public RealPayment(
      CreditService creditService,
      AuthService authService,
      @Assisted Date startDate,
      @Assisted Money amount) {
     ...
   }
 }

এটি দেখুন CreditServiceএবং AuthServiceধারক দ্বারা ইঞ্জেকশন করা উচিত তবে স্টার্টডেট এবং পরিমাণটি তৈরির সময় কোনও বিকাশকারী দ্বারা নির্দিষ্ট করতে হবে।

সুতরাং পরিবর্তে একটি ইনজেকশনের Paymentআপনি একটি ইনজেকশনের হয় PaymentFactoryপ্যারামিটার হিসাবে চিহ্নিত করা হয়েছে সঙ্গে @AssistedRealPayment

public interface PaymentFactory {
    Payment create(Date startDate, Money amount);
}

এবং একটি কারখানা বাঁধাই করা উচিত

install(new FactoryModuleBuilder()
     .implement(Payment.class, RealPayment.class)
     .build(PaymentFactory.class));

কনফিগার করা কারখানাটি আপনার ক্লাসে ইনজেকশনের ব্যবস্থা করা যেতে পারে।

@Inject
PaymentFactory paymentFactory;

এবং আপনার কোড ব্যবহৃত

Payment payment = paymentFactory.create(today, price);

8
অনেক চেয়েছি এবং আমার সন্দেহের আরও সংক্ষিপ্ত এবং স্পষ্ট ব্যাখ্যা খুঁজে পাইনি। অনেক ধন্যবাদ
গ্যাবার

18
এটি গিথুবে ডকুমেন্টেশনের চেয়ে বোঝা সহজ। সাবাশ.
আরজব্বার

8
এর তুলনায় গিথুব ডকুমেন্টেশনগুলি ক্র্যাপ।
ইএমএম

4
'ডেট' এবং 'অর্থ' কীভাবে 'পেমেন্ট'-এ কল করা উচিত? কেন তারা এখানে কনস্ট্রাক্টর ইনজেকশন করা উচিত?
হর্ষিত

4
যারা আশ্চর্য, তাদের জন্য RealPaymentএকটি ইন্টারফেস বাস্তবায়ন করার প্রয়োজন নেই।
jsallaberry
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.