0
我想实现对象的构造如下图所示,城堡温莎propogating直列依赖
using (var context = new DbContext())
{
var processor = new Processor(context, new Parser(context, new Logger(context)), new Logger(context));
}
但使用温莎城堡。我正在使用内联依赖关系,如下面的代码所示,但是Castle Windsor文档声明“内联依赖关系不会被传播”Castle Windsor passing arguments。我怎样才能以另一种方式实现这个目标?
using Castle.MicroKernel.Registration;
using Castle.Windsor;
using System;
namespace IOCTesting
{
class Program
{
static void Main(string[] args)
{
using (var context = new DbContext())
{
var processor = new Processor(context, new Parser(context, new Logger(context)), new Logger(context));
}
var container = new WindsorContainer();
container
.Register(Component.For<IProcessor>()
.ImplementedBy<Processor>());
container
.Register(Component.For<IParser>()
.ImplementedBy<Parser>());
container
.Register(Component.For<ILogger>()
.ImplementedBy<Logger>());
//[1] Creating my scope object here. (context)
using (var context = new DbContext())
{
var processor = container.Resolve<IProcessor>(new { context = context });
}
}
}
public class DbContext : IDisposable
{
public void Dispose()
{
Console.WriteLine("DbContext disposed.");
}
}
public class Processor : IProcessor
{
private readonly DbContext _context;
private readonly ILogger _logger;
private readonly IParser _parser;
//Dependency context passed in is the same object within the scope. See [1]
public Processor(DbContext context, IParser parser, ILogger logger)
{
_context = context;
_parser = parser;
_logger = logger;
}
}
public class Parser : IParser
{
private readonly DbContext _context;
private readonly ILogger _logger;
//Dependency context passed in is the same object within the scope. See [1]
public Parser(DbContext context, ILogger logger)
{
_context = context;
_logger = logger;
}
}
public class Logger : ILogger
{
private readonly DbContext _context;
//Dependency context passed in is the same object within the scope. See [1]
public Logger(DbContext context)
{
_context = context;
}
}
public interface IProcessor
{
}
public interface IParser
{
}
public interface ILogger
{
}
}
这很好用。感谢那。 – dezzy