Используя Windsor 3.0, это довольно просто (если я правильно понял ваш вопрос, мои извинения, если я что-то упустил).
Самое простое, что можно сделать, чтобы показать вам, - это создать консольное приложение и сделатьуверен, что вы ссылаетесь:
- Castle.Core
- Castle.Windsor
- Castle.Facilities.WcfIntegration
- System.ServiceModel
- System.ServiceModel.Web
- System.Runtime.Serialization
Теперь определите RESTful-сервис следующим образом:
[DataContract]
public class Frob
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Fribble { get; set; }
}
[ServiceContract]
public interface IFrobService
{
[OperationContract]
[WebGet(UriTemplate = "/")]
IEnumerable<Frob> GetAllFrobs();
[OperationContract]
[WebGet(UriTemplate = "/{name}")]
Frob GetFrobByName(string name);
}
public class FrobService : IFrobService
{
private readonly List<Frob> _frobs
= new List<Frob>
{
new Frob {Name = "Foob", Fribble = "Soop"},
new Frob {Name = "Hoob", Fribble = "Soop"},
new Frob {Name = "Doob", Fribble = "Noop"}
};
public IEnumerable<Frob> GetAllFrobs()
{
return _frobs;
}
public Frob GetFrobByName(string name)
{
return _frobs
.FirstOrDefault(f =>
f.Name.Equals(name,
StringComparison.OrdinalIgnoreCase));
}
}
Теперь у вас есть то, что вы можетевот так подключите этот сервис к контейнеру windsor (и поскольку это консольное приложение, я просто покажу вам основной метод):
public static class Program
{
static void Main()
{
var container = new WindsorContainer();
container
.AddFacility<WcfFacility>(f => f.CloseTimeout = TimeSpan.Zero)
.Register(Component.For<IFrobService>()
.ImplementedBy<FrobService>()
.AsWcfService(new RestServiceModel("http://localhost/frobs")));
Console.ReadKey();
}
}
И это сервис REST WCF, размещенный в Castle Windsor.
Указав браузеру: «http://localhost/frobs" даст вам все лягушки и наведя браузер, скажем,« http://localhost/frobs/Doob" даст вам лягушку по имени Дуб, вы поймете идею ...