【发布时间】:2011-08-05 15:27:19
【问题描述】:
我想将命令行参数(即 string[]args)传递给两个不同的服务。我尝试了很多东西,最接近的是下面的代码。
namespace CastleTest
{
static class Program
{
static void Main(string [] args)
{
IWindsorContainer container = new WindsorContainer();
container.Install(FromAssembly.This());
IService srv = container.Resolve<IService>(new Hashtable {{"args", args}});
srv.Do();
}
}
public class Installer : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<IService>().ImplementedBy<Service>());
container.Register(Component.For<IRole>().ImplementedBy<RoleService>());
}
}
public interface IRole
{
string Role { get; }
}
public class RoleService : IRole
{
private string[] args;
public RoleService(string[] args)
{
this.args = args;
}
public string Role { get { return args[1]; } }
}
public interface IService
{
void Do();
}
public class Service : IService
{
private readonly string[] args;
private readonly IRole service;
public Service(string[] args, IRole service)
{
this.args = args;
this.service = service;
}
public void Do()
{
Console.WriteLine(args[0] + ": " + service.Role);
}
}
}
执行此命令:
无法创建组件“CastleTest.RoleService”,因为它需要满足依赖关系。 CastleTest.RoleService 正在等待以下依赖项: 键(具有特定键的组件) - 未注册的参数。
这是为什么?为什么 RoleService 的依赖“args”不满足?更重要的是?我该怎么做?
PS。我想使用 FromAssembly 来调用我的安装程序,因此无法将构造函数参数传递给它(afaik)。
【问题讨论】:
标签: inversion-of-control castle-windsor ioc-container