मेरा प्रश्न इस प्रकार है: मेरे पास बेस नियंत्रक (एएसपी.नेट एमवीसी नियंत्रक) है जिसे एप्लिकेशन कंट्रोलर कहा जाता है, और मैं चाहता हूं कि मेरे सभी नियंत्रक इसे प्राप्त करें। इस बेस कंट्रोलर में एक इलोगर संपत्ति है, जो एक [निर्भरता] विशेषता के साथ चिह्नित है। (हाँ, मुझे पता है कि मुझे कन्स्ट्रक्टर इंजेक्शन का उपयोग करना चाहिए, मैं इस विशेषता के बारे में उत्सुक हूं)।एकता [निर्भरता] इंजेक्शन और विरासत
मैं कंटेनर, पंजीकृत प्रकार बनाया, डिफ़ॉल्ट कारखाना बदल गया है, सब कुछ ठीक है। समस्या यह है कि जब मैं व्युत्पन्न नियंत्रक में अपनी लॉगर संपत्ति का उपयोग करने का प्रयास करता हूं, तो यह हल नहीं होता है।
क्या मैं गलत कर रहा हूँ? व्युत्पन्न नियंत्रक बनाते समय कंटेनर बेस क्लास निर्भरताओं को क्यों हल नहीं करता है?
कोड नमूने:
ApplicationController:
public class ApplicationController : Controller
{
[Dependency]
protected ILogger _logger { get; set; }
}
व्युत्पन्न नियंत्रक:
public class HomeController : ApplicationController
{
public HomeController()
{
}
public ActionResult Index()
{
_logger.Log("Home controller constructor started.");
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
}
एकता नियंत्रक कारखाना:
public class UnityControllerFactory : DefaultControllerFactory
{
private readonly IUnityContainer _container;
public UnityControllerFactory(IUnityContainer container)
{
_container = container;
}
protected override IController GetControllerInstance(Type controllerType)
{
return _container.Resolve(controllerType) as IController;
}
}
Global.asax.cs नमूना:
मैं एकता के लिए काफी नया हूँ, इसलिए शायद मैंने कुछ गलत नहीं किया।
धन्यवाद, अमी।
क्या यह एप्लिकेशन नियंत्रक के लिए काम करता है? –
क्या आपको यह कभी काम करने के लिए मिला? मेरा कोड लगभग समान है और मुझे या तो हल करने के लिए आधार नियंत्रक नहीं मिल सकता है। कोई? –
रे - यह संपत्तियों को सार्वजनिक बनाने के बाद काम किया। यूनिटी काम करने के लिए आपको वह कीमत चुकानी पड़ेगी। – Ami