[英]How do I inject dependencies into a custom RoleProvider with Windsor?
[英]How to inject different dependencies that depends on argument name using Windsor
我有一个像这样的结构:
public class Processor<T>
{
public Processor(IManager<T> xmlManager, IManager<T> memoryManager)
{
}
}
public interface IManager<T>
{
}
public class Manager<T> : IManager<T>
{
private readonly IProvider _provider;
public Manager(IProvider provider)
{
_provider = provider;
}
}
public interface IProvider { }
public class XmlProvider : IProvider { }
public class MemoryProvider : IProvider { }
我需要向Processor类注入Manager类的两个实例,但要进行不同的注入。 因此需要我进行硬编码:
var p = new Processor<T>(new Manager<T>(new XmlProvider()) , new Manager<T>(new MemoryProvider()))
我也需要使用开放的通用类型T解决此问题。
我无法弄清楚如何配置容器来管理它。 我知道有.DependsOn(Property.ForKey("xmlManager").Eq()
指令。但是除了硬编码实现之外,我无法理解用Eq()
编写什么内容。提供程序具有自己的依赖性,因此编写起来并不聪明.Eq(new Manager<T>(new XmlProvide(new OtherInjection(new AnotherOne()))))
在那儿,我不能使用开放的泛型。
UPD 1 NightOwl888先生。 关于逻辑。 一个提供程序用于将数据存储在内存缓存中。 第二个提供程序用于存储将数据存储在xml文件中的数据。 某种2级缓存模型。 如果我交换两个参数(如史蒂文所说),它不会中断,但它不会像设计时那样工作(由于检索信息的速度不同)。
我没有使用温莎,但常见的解决方案如下
public class ManagerFactory // register it in container
{
public IManager<T> Create<T>(IProvider provider) { return ... }
}
public class Processor<T>
{
public Processor(ManagerFactory factory, IEnumerable<IProvider> providers)
{
myManagers = providers.Select(provider => factory.Create<T>(provider).ToList();
}
}
通常,您可以注册某个接口的许多实现(在您的情况下为IProvider),因此容器可以将它们全部注入
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.