Je travaille sur mon premier projet Sharepoint. Y a-t-il un moyen d'utiliser l'injection de dépendance (comme castle windsor) dans sharepoint ? Si oui, pouvez-vous me fournir un exemple de code ?
Merci
Je travaille sur mon premier projet Sharepoint. Y a-t-il un moyen d'utiliser l'injection de dépendance (comme castle windsor) dans sharepoint ? Si oui, pouvez-vous me fournir un exemple de code ?
Merci
Utilisez le localisateur de services SharePoint du groupe MS Patterns & Practices : http://spg.codeplex.com/
Vous pouvez faire comme ci-dessous. Mais ce n'est pas génial car SharepointClass est instancié par Sharepoint et non par le conteneur d'injection de dépendance. Donc pour l'instant, dans SharepointClass vous pouvez résoudre votre dépendance comme Ioc.Resolve() et les dépendances plus profondes de l'instance IService seront injectées par 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>();
}
}
Et dans votre classe 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();
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.