請注意,我已更改問題中的代碼。使用Castle Windsor在服務類的構造函數中初始化具有參數化構造函數的類
請參閱下面的服務器端代碼(WCF服務):
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
using Castle.Windsor;
namespace WcfService1
{
public class WindsorInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IGreeting, Greeting>(),
Component.For<IGreetingService, GreetingService>());
}
}
public interface ILanguage
{
string SayHello();
}
public class Spanish : ILanguage
{
public string SayHello()
{
return "Hola";
}
}
public interface IGreeting
{
string SayHello();
}
public class Greeting: IGreeting
{
ILanguage Language;
public Greeting (ILanguage language)
{
Language = language;
}
public string SayHello()
{
return Language.SayHello();
}
}
public interface IGreetingFactory
{
IGreeting Create(ILanguage Language);
}
[ServiceContract]
public interface IGreetingService
{
[OperationContract]
string SayHello(string strLanguage);
}
public class GreetingService : IGreetingService
{
private readonly IGreetingFactory greetingFactory;
private IGreeting greeting;
public GreetingService()
{
}
public GreetingService(IGreetingFactory greetingFactory)
{
// store the factory until we need it
this.greetingFactory = greetingFactory;
}
public string SayHello (string strLanguage)
{
if (strLanguage == "S")
{
ILanguage Language = new Spanish();
Language = new Spanish();
greeting = new Greeting(Language);
}
return greeting.SayHello();
}
}
}
和下面的客戶端代碼:
ServiceReference1.GreetingServiceClient s1 = new ServiceReference1.GreetingServiceClient();
string greeting = s1.SayHello("S");
ServiceReference1.GreetingServiceClient
是一個服務引用。
代碼的工作原理與我所期望的一樣,即Castle Windsor允許我在服務的構造函數中注入Greeting。然而,Greeting類本身有一個參數化的構造函數(它需要一個語言)。在上面的代碼中,我必須在服務的Say Hello
方法中初始化Greeting(使用語言)。如何在服務的構造函數中初始化Greeting(使用語言)?
是'operator'不是關鍵字(例如:應該是'@ operator'代替)。對於其他事情,我想我寧願依賴包含用戶輸入並使用該引用的對象 – Icepickle
[Castle Windsor註冊類與構造函數參數]的可能重複(https://stackoverflow.com/questions/20243543/castle -windsor-register-class-with-constructor-parameters) – Icepickle
@Icepickle,抱歉,我不知道你的意思。你能發表一個答案嗎? – w0051977