मैं सैंडरसन के प्रो ASP.NET MVC फ्रेमवर्क के ऊपर जा रहा हूँ और अध्याय 4 में वह Creating a Custom Controller Factory चर्चा करता है और ऐसा लगता है के साथ ASP.NET MVC में नियंत्रण (आईओसी) के उलट की स्थापना है कि मूल विधि, AddComponentLifeStyle
या AddComponentWithLifeStyle
, नियंत्रकों रजिस्टर करने के लिए इस्तेमाल किया अब पदावनत किया गया है:कैसल विंडसर
public class WindsorControllerFactory : DefaultControllerFactory
{
IWindsorContainer container;
public WindsorControllerFactory()
{
container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
// register all the controller types as transient
var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
where typeof(IController).IsAssignableFrom(t)
select t;
//[Obsolete("Use Register(Component.For<I>().ImplementedBy<T>().Named(key).Lifestyle.Is(lifestyle)) instead.")]
//IWindsorContainer AddComponentLifeStyle<I, T>(string key, LifestyleType lifestyle) where T : class;
foreach (Type t in controllerTypes)
{
container.Register(Component.For<IController>().ImplementedBy<???>().Named(t.FullName).LifeStyle.Is(LifestyleType.Transient));
}
}
// Constructs the controller instance needed to service each request
protected override IController GetControllerInstance(Type controllerType)
{
return (IController)container.Resolve(controllerType);
}
}
नया सुझाव Register(Component.For<I>().ImplementedBy<T>().Named(key).Lifestyle.Is(lifestyle))
उपयोग करने के लिए है, लेकिन मैं समझ नहीं ImplementedBy<???>()
विधि में लागू करने नियंत्रक प्रकार पेश करने के लिए कैसे। मैंने ImplementedBy<t>()
और ImplementedBy<typeof(t)>()
की कोशिश की, लेकिन मुझे कार्यान्वयन प्रकार में पास करने का उचित तरीका नहीं मिल रहा है। कोई विचार?
कृपया विंडसर से संबंधित किसी भी चीज़ के लिए सैंडर्स की पुस्तक का उपयोग न करें, यह ** ** ** अभी तक पुराना है। –
@ मॉरिसियो शफ़फर, मुझे एहसास है कि कुछ चीजें पुरानी हैं, लेकिन कुछ निफ्टी रत्न हैं जो उपयोगी हो सकते हैं ... विशेष रूप से, निर्भरता को हल करने में सहायता के लिए Web.config का उपयोग करना: उदा। एक रिपोजिटरी क्लास को प्रारंभ करने के लिए एक कनेक्शन स्ट्रिंग प्रदान करना आवश्यक है (हालांकि मुझे यह पता नहीं लगा है कि इसे अभी तक कैसे किया जाए)। – Kiril
जो पुराना है, मैं ऐसा करने की अनुशंसा नहीं करता। –