मैं निम्नलिखित कोड है: निर्माता इंजेक्शन के साथएक वर्ग को कैसे पंजीकृत करें जिसमें 'Func <>' पैरामीटर के रूप में है?
_container = new UnityContainer();
_container.RegisterType<IDownloader, Downloader>();
_container.RegisterType<INewObject, NewObject>();
_container.RegisterType<SearchViewModel>();
SearchViewModel
वर्ग:
class SearchViewModel
{
private readonly Func<IDownloader> _downloaderFactory;
private readonly INewObject _newObject;
private IDownloader _downloader;
public SearchViewModel(Func<IDownloader> downloaderFactory, INewObject newObject)
{
_downloaderFactory = downloaderFactory;
_newObject = newObject;
}
}
प्रश्न: कैसे SearchViewModel
है कि Fun<>
पैरामीटर के रूप में रजिस्टर करने के लिए?
_container.RegisterType<SearchViewModel>(new InjectionConstructor(DownloaderFactory()));
कोड ऊपर केवल INewObject
बिना काम करता है।
लक्ष्य: InjectionConstructor
साथ हल कारखाने और स्वचालित रूप से INewObject, INewObject2, INewObject3
हल (जैसे पैरामीटर के बिना: RegisterType<SearchViewModel>()
)।
क्या यह संभव है? शायद वैकल्पिक?
public interface IDownloaderFactory
{
IDownloader Create();
}
तो फिर तुम कारखाने कि बस उदाहरणों को हल करने के लिए फिर कंटेनर का उपयोग करता प्रतिनिधित्व करने के लिए एक वर्ग बनाने के लिए:
आप इनवॉब्जेक्ट पैरामीटर के लिए सेटर इंजेक्शन का उपयोग क्यों नहीं करते? – daryal
Func पर निर्भर करने के लिए आप SearchViewModel क्यों बनाते हैं? क्या यह रिसाव अमूर्त नहीं है? मुझे लगता है कि आपको सीधे आईडीउनलोडर इंटरफेस इंजेक्ट करना चाहिए। IDownloader का कंक्रीट कार्यान्वयन कारखाने के व्यवहार को समाहित कर सकता है। यहां कोड नमूना देखें: http://stackoverflow.com/questions/9757953/can-any-of-existing-ioc-containers-create-the-lazy-proxy-classes- गतिशील रूप से –