Khi đăng ký thành phần trong Castle Windsor, làm cách nào để chúng tôi ràng buộc việc triển khai cụ thể giao diện cho một thành phần có phụ thuộc vào giao diện đó. Tôi biết trước việc triển khai nào cần được sử dụng bởi thành phần.Castle Windsor - thực hiện nhiều giao diện
Ví dụ: tôi đã tạo một ứng dụng bảng điều khiển mẫu dựa trên mã từ một số blog và hướng dẫn.
Sau đây là mã.
public interface IReport
{
void LogReport();
}
public interface ILogger
{
string Log();
}
public class FileLogger : ILogger
{
public string Log()
{
return "Logged data to a file";
}
}
public class DatabaseLogger : ILogger
{
public string Log()
{
return "Logged data to a database";
}
}
public class McAfeeService : IReport
{
private readonly ILogger _logger;
public McAfeeService(ILogger logger)
{
this._logger = logger;
}
public void LogReport()
{
string getLogResult = this._logger.Log();
Console.WriteLine("McAfee Scan has " + getLogResult);
}
}
public class NortonService : IReport
{
private readonly ILogger _logger;
public NortonService(ILogger logger)
{
this._logger = logger;
}
public void LogReport()
{
string getLogResult = this._logger.Log();
Console.WriteLine("Norton Scan has " + getLogResult);
}
}
class Program
{
private static IWindsorContainer container;
static void Main(string[] args)
{
// Register components
container = new WindsorContainer();
container.Register(Component.For<IReport>().ImplementedBy<NortonService>());
container.Register(Component.For<ILogger>().ImplementedBy<FileLogger>());
IReport service = container.Resolve<IReport>();
service.LogReport();
Console.ReadLine();
}
}
Tôi muốn NortonService luôn sử dụng Filelogger và McAfeeService để sử dụng Trình ghi cơ sở dữ liệu.
Trong chương trình trên, tôi không thể liên kết NortonService với FileLogger.
Cách thực hiện?