3
我需要使用castle-windsor的Inline Dependencies功能。 我需要注入特定的組件鏈中的依賴關係。 我有這樣的情況。Castle Windsor Inline依賴關係
static void Main(string[] args)
{
var container = new Castle.Windsor.WindsorContainer();
container.Register(
Component.For<IHigherBusiness>().ImplementedBy<HigherBusiness>().DependsOn(Dependency.OnComponent<ILogger, FullDetailLogger>())
);
container.Register(Component.For<ISomeBusiness>().ImplementedBy<Business>());
container.Register(Component.For<ILogger>().ImplementedBy<FullDetailLogger>().IsFallback());
container.Register(Component.For<ILogger>().ImplementedBy<SimpleLogger>());
var business = container.Resolve<IHigherBusiness>();
business.DoSomething();
var logger = container.Resolve<ILogger>();
logger.Log("Some Log... .");
}
}
public interface IHigherBusiness
{
void DoSomething();
}
public class HigherBusiness : IHigherBusiness
{
private ISomeBusiness someBusiness;
public HigherBusiness(ISomeBusiness someBusiness)
{
this.someBusiness = someBusiness;
}
public void DoSomething()
{
someBusiness.DoSomething();
}
}
public interface ISomeBusiness
{
void DoSomething();
}
public class Business : ISomeBusiness
{
private ILogger logger;
public Business(ILogger logger)
{
this.logger = logger;
}
public void DoSomething()
{
logger.Log("Message");
}
}
public interface ILogger
{
void Log(string message);
}
public class SimpleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine("Simple Logger: " + message);
}
}
public class FullDetailLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine("Full detail Logger: " + message);
}
}
結果是:
Simple Logger: Message
Simple Logger: Some Log... .
但我相信這一點:
Full detail Logger: Message
Simple Logger: Some Log... .
我怎樣才能做到這一點?