मैं ऑर्चर्ड सीएमएस का उपयोग कर एक वेबसाइट बना रहा हूं और मेरे पास एक बाहरी .NET प्रोजेक्ट है जो निनजेक्ट के लिए निर्भरता इंजेक्शन के लिए लिखा गया है जिसे मैं ऑर्चर्ड सीएमएस के भीतर एक मॉड्यूल के साथ उपयोग करना चाहता हूं। मुझे पता है कि ऑर्चर्ड निर्भरता इंजेक्शन के लिए ऑटोफैक का उपयोग करता है और इससे मुझे समस्याएं आ रही हैं क्योंकि मैंने कभी डीआई के साथ काम नहीं किया था।क्या मैं ऑर्चर्ड सीएमएस के भीतर अपने निनजेक्ट .NET प्रोजेक्ट का उपयोग कर सकता हूं?
मैं एक Autofac मॉड्यूल, UserModule
है, जो एक स्रोत, UserRegistrationSource
, इस तरह पंजीकृत करता है बनाया है:
UserModule.cs
public class UserModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterSource(new UserRegistrationSource());
}
}
UserRegistrationSource.cs
public class UserRegistrationSource : IRegistrationSource
{
public bool IsAdapterForIndividualComponents
{
get { return false; }
}
public IEnumerable<IComponentRegistration> RegistrationsFor(Service service, Func<Service, IEnumerable<IComponentRegistration>> registrationAccessor)
{
var serviceWithType = service as IServiceWithType;
if (serviceWithType == null)
yield break;
var serviceType = serviceWithType.ServiceType;
if (!serviceType.IsInterface || !typeof(IUserServices).IsAssignableFrom(serviceType) || serviceType != typeof(IUserServices))
yield break;
var registrationBuilder = // something...
yield return registrationBuilder.CreateRegistration();
}
}
UserServices.cs
public interface IUserServices : IDependency
{
void Add(string email, string password);
}
public class UserServices : IUserServices
{
private readonly EFMembershipManager _manager;
public UserServices(EFMembershipManager manager)
{
_manager = manager;
}
public void Add(string email, string password)
{
_manager.createUser(email, password);
}
}
EFMembershipManager.cs निर्माता
public EFMembershipManager(ServerRepository db,
ServerRepositoryMembershipProvider membershipProvider,
string testUsername,
string serverUsername)
{
...
}
EFMembershipManager
बाहरी परियोजना जो डि के लिए Ninject का उपयोग करता है और ServerRepository
और ServerRepositoryMembershipProvider
जिसे भी Ninject का उपयोग कर इंजेक्ट किया जाता का उपयोग करता है से एक वर्ग है।
और अब मैं अटक हूँ ...
चाहिए UserRegistrationSource
एक निर्माता तर्क के रूप में Ninject कंटेनर (गिरी) लेने के लिए और IUserServices
सेवा खोजने के लिए और उसके बाद मध्यस्थता करने Ninject गिरी पर ले कर कोशिश करते हैं और एक खाली लौट संख्यात्मक है कि Autofac IUserServices
से संबंधित किसी भी चीज़ को हल करने का प्रयास नहीं करता है या यह गलत दृष्टिकोण है?
क्या आप समझा सकते हैं कि इसे फिर से लिखने की आवश्यकता क्यों होगी? मुझे लगता है कि केवल इंजेक्शन से निपटने वाला छोटा कोड संशोधित करने की आवश्यकता होगी। आप समस्याओं का जिक्र करते हैं। वे विशेष रूप से क्या हैं? –
@BertrandLeRoy पुन: लिखना इस तथ्य से आता है कि बाहरी प्रोजेक्ट में कई निर्भरता इंजेक्शन और अन्य परियोजनाओं के संदर्भ हैं जो निर्भरता इंजेक्शन के लिए निनजेक्ट का भी उपयोग करते हैं। तो काम करने के लिए सब कुछ पाने के लिए बहुत सारे संशोधन होंगे। जिस समस्या का सामना कर रहा हूं वह यह है कि मैं अपने ऑर्चर्ड मॉड्यूल में बाहरी प्रोजेक्ट को ऑटोफैक इंजेक्शन में सभी निंजा इंजेक्शन को परिवर्तित किए बिना कैसे संदर्भित कर सकता हूं। यदि यह भी संभव है। – Mattias
मुझे नहीं लगता कि एक और तरीका है या यदि आप यह काम करने में सक्षम होंगे। बाहरी परियोजना को बाहरी रखने के लिए बेहतर हो सकता है। –