Внедрение зависимостей в Sharepoint 2010 - PullRequest
8 голосов
/ 07 марта 2011

Я работаю над своим первым проектом sharepoint. Есть ли способ использовать инъекцию зависимостей (например, замок Виндзор) в sharepoint? Если да, можете ли вы предоставить код сэмпла?

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 октября 2015

Вы можете сделать, как показано ниже. Но это не удивительно, потому что SharepointClass создается в sharepoint, а не в контейнере внедрения зависимостей. Поэтому на данный момент в SharepointClass вы можете разрешить свою зависимость, например Ioc.Resolve (), и более глубокие зависимости экземпляра IService будут внедрены Windsor.

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();
    }
}
0 голосов
/ 07 марта 2011

Используйте локатор служб SharePoint из группы MS Patterns & Practices: http://spg.codeplex.com/

...