मैं वर्तमान में निनजेक्ट का उपयोग कर एक एमवीसी 3 एप्लीकेशन बना रहा हूं। मेरे पास दो नियंत्रक हैं जो निनजेक्ट द्वारा एक भंडार के साथ इंजेक्शन प्राप्त करते हैं, जिनमें से दोनों मेरी स्थानीय मशीन पर ठीक काम करते हैं।

हालांकि, जब मैं उन्हें अपने दूरस्थ वेब सर्वर पर तैनात करता हूं, तो मुझे एक त्रुटि के रूप में The IControllerFactory 'Inventory.Infrastructure.NinjectControllerFactory' did not return a controller for the name 'GetOptions'. मिलता है, लेकिन केवल जब मैं नियंत्रकों में से एक को मारता हूं - दूसरा ठीक काम करता है। क्या कुछ ऐसा है जो मैं यहाँ गलत कर रहा हूँ? मैं निनजेक्ट और डीआई के लिए काफी नया हूं इसलिए अगर कोई और तरीका है तो मुझे इस बारे में जाना चाहिए, कृपया मुझे बताएं। धन्यवाद!

यहाँ मेरा नियंत्रक कारखाना है

public class NinjectControllerFactory : DefaultControllerFactory
{
    private IKernel ninjectKernel;

    public NinjectControllerFactory()
    {
        ninjectKernel = new StandardKernel();
        AddBindings();
    }

    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
    {
        return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
    }

    private void AddBindings()
    {
        ninjectKernel.Bind<IVehicleRepository>().To<EFVehicleRepository>();
    }
}

एप्लिकेशन_स्टार्ट में मेरे पास है:

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

और अंत में, मेरे नियंत्रक हैं

public class InventoryAPIController : Controller
{
    IVehicleRepository repository;

    public InventoryAPIController(IVehicleRepository repo)
    {
        repository = repo;

    }
}

तथा

public class VehicleController : Controller
{


    IVehicleRepository repository;

    public VehicleController(IVehicleRepository repo)
    {
        repository = repo;
    }
}
1
codechinchilla 3 अगस्त 2011, 01:43

1 उत्तर

सबसे बढ़िया उत्तर

अपने कस्टम नियंत्रक कारखाने के बजाय nuget पर पाए गए Ninject.MVC3 का उपयोग करने का प्रयास करें। यह कंट्रोलर फैक्ट्री के बजाय डिपेंडेंसी रीसोल्वर का उपयोग करता है, जो एमवीसी 3 के लिए पसंदीदा तरीका है।

2
Remo Gloor 3 अगस्त 2011, 03:34
आह मुझे नहीं पता था कि एक एमवीसी 3 विशिष्ट संस्करण था, कल कोशिश करेगा, धन्यवाद!
 – 
codechinchilla
3 अगस्त 2011, 06:21