2011-03-07 9 views
8

मैं अपने पहले शेयरपॉइंट प्रोजेक्ट पर काम कर रहा हूं। क्या कोई तरीका है कि मैं शेयरपॉइंट में निर्भरता इंजेक्शन (जैसे कि महल विंडसर) का उपयोग कर सकता हूं? यदि आप ऐसा कर सकते हैं तो कृपया एक नमूना कोड प्रदान करें।शेयरपॉइंट 2010 में निर्भरता इंजेक्शन

धन्यवाद

+0

अच्छा सवाल में;) – Rookian

उत्तर

0

एमएस पैटर्न & आचरण समूह से SharePoint सेवा लोकेटर का उपयोग करें: http://spg.codeplex.com/

+3

निर्भरता इंजेक्शन और सेवा लोकेटर एक ही समस्या को हल करने की कोशिश करते हैं, मैं सेवा लोकेटर खतरनाक पर विचार करें। विवरण के लिए http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx देखें। –

+3

-1 सेवा स्थान DepdencyInjection (DI) के समान नहीं है। डीआई का मतलब है निर्भरता को इंजेक्ट करना मतलब सेवा स्थान एक निर्भरता प्राप्त करने के लिए एक कॉल है। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं। – Rookian

+3

बिल्कुल भयानक !!! यह निर्भरता इंजेक्शन नहीं है –

0

आप नीचे दिए गए की तरह कर सकते हैं। लेकिन यह कमाल नहीं है क्योंकि, SharepointClass को निर्भरता इंजेक्शन कंटेनर द्वारा शेयरपॉइंट द्वारा तुरंत चालू किया जाता है। तो अब के लिए, SharepointClass में आप अपनी निर्भरता को हल कर सकते हैं जैसे Ioc.Resolve() और IService उदाहरण की गहरी निर्भरता विंडसर द्वारा इंजेक्शन दी जाएगी।

public interface IMyCode 
{ 
    void Work(); 
} 

public class MyCode : IMyCode 
{ 
    public void Work() 
    { 
     Console.WriteLine("working"); 
    } 
} 

public interface IService 
{ 
    void DoWork(); 
} 

public class MyService : IService 
{ 
    private readonly IMyCode _myCode; 

    public MyService(IMyCode myCode) 
    { 
     _myCode = myCode; 
    } 

    public void DoWork() 
    { 
     Console.WriteLine(GetType().Name + " doing work."); 
     _myCode.Work(); 
    } 
} 

public class Ioc 
{ 
    private static readonly object Syncroot = new object(); 
    private readonly IWindsorContainer _container; 
    private static Ioc _instance; 

    private Ioc() 
    { 
     _container = new WindsorContainer(); 
     //register your dependencies here 
     _container.Register(Component.For<IMyCode>().ImplementedBy<MyCode>()); 
     _container.Register(Component.For<IService>().ImplementedBy<MyService>()); 
    } 

    public static Ioc Instance 
    { 
     get 
     { 
      if (_instance == null) 
      { 
       lock (Syncroot) 
       { 
        if (_instance == null) 
        { 
         _instance = new Ioc(); 
        } 
       } 
      } 
      return _instance; 
     } 
    } 

    public static T Resolve<T>() 
    { 
     return Instance._container.Resolve<T>(); 
    } 
} 

और अपने SharePoint वर्ग

public class SharepointClass : SharepointWebpart //instantiated by sharepoint 
{ 
    public IService Service { get { return Ioc.Resolve<IService>(); } } 

    public void Operation() 
    { 
     Console.WriteLine("this is " + GetType().Name); 
     Service.DoWork(); 
    } 
}