आप सही दिशा में इशारा किया पाने के लिए, मैं तुम्हें onion architecture.
पर एक नज़र डालें यह मूल आधार है कि किसी भी कोड अधिक केंद्रीय परतों पर निर्भर कर सकता है सुझाव देना चाहेंगे। आपके परिदृश्य में (और यह रेपोजिटरी पैटर्न का उपयोग कर एमवीसी 3 ऐप्स के लिए एक आम बात है) आपके यूआई में सेवा परत का संदर्भ होना चाहिए और डेटा लेयर का संदर्भ होना स्वीकार्य है।
यदि आप इसे स्वीकार करने के इच्छुक हैं (यदि आप क्लासिक एन-स्तरीय सेटअप से आ रहे हैं, तो यह निगलने की एक कठिन गोली है, मुझे पता है), तो आपकी स्थिति बहुत आसान हो जाती है।
Ninject के साथ
अब आप इस प्रकार कुछ करना:
अपने NinjectMVC3.cs में, फ़ाइल अपने CreateKernel अब
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var modules = new INinjectModule[]
{
new ServiceDIModule(),
new RepositoryDIModule()
};
var kernel = new StandardKernel(modules);
//RegisterServices(kernel); <-- Only if you have some custom binding
// that are UI specific
return kernel;
}
हो जाता है, अपनी सेवाओं को परत में आप Ninject (सिर्फ सादे Ninject के लिए एक संदर्भ जोड़ने
using Ninject.Modules;
namespace MyServiceLayer
{
public class ServiceDIModule : NinjectModule
{
public override void Load()
{
//Bind Services
Bind<IPracticeService>().To<PracticeService>().InRequestScope();
}
}
}
और आप के लिए एक ही प्रक्रिया को दोहराने: NuGet, NuGet के माध्यम से नहीं MVC3 dropin) और जोड़ने मैं क्या ServiceDIModule जो इस तरह दिखता है ऊपर बुलाया के माध्यम से आर डाटा टीयर इंजेक्शन आप
namespace MyDataLayer
{
public class RepositoryDIModule : NinjectModule
{
public override void Load()
{
//Bind Repos
Bind<IFooRepository>().To<FooRepository>().InRequestScope();
}
}
}
अब, आप आप जिस तरह से अग्रिम की जरूरत बाइंडिंग के सभी के लिए उपयोग किया हो सकता है (UnitofWork, DatabaseFactory, IFooRepository, आदि)। तो, मेरे लिए आपका सवाल वास्तव में सोच में बदलाव के लिए उबाल जाता है। यदि आप प्याज अवधारणा को स्वीकार कर सकते हैं (बेरहमी से या अन्यथा), तो आपका परिदृश्य स्वयं को साफ करता है।
आप Project Silk और CodeCampServer भी देख सकते हैं। वे दोनों कुछ हद तक "प्याज" अवधारणा को लागू करते हैं (निश्चित रूप से रेशम, मैं अभी समाधान देख रहा हूं और यूआई वेब प्रोजेक्ट में डेटा प्रोज में एक रेफरी है जिसमें सभी रेपोज़ शामिल हैं)
मुझे बताएं आपको क्या लगता है।
डुप्लिकेट: http://stackoverflow.com/questions/5267525/dal-bll-gui-composition-root-how-to-setup-di- बाइंडिंग –