我正面临以下问题
鉴于此伪代码,
public interface IA
{
...
}
public interface IB
{
IA someOptionalDependency;
}
public interface IRepositoryA
{
...
IA GetDefault();
IA Get(object Id);
}
public interface IFactoryB
{
IB Create();
IB Create(IA a);
}
public class B : IB
{
public B(IRepositoryA repoA)
{
_repoA=repoA;
}
public IA someOptionalDependency {
get{
if (_someOptionalDependency==null)
_someOptionalDependency=_repoA.GetDefault();
return _someOptionalDependency;
}
set{
if (_someOptionalDependency!=null)
throw(new Exception("This is read only");
_someOptionalDependency=value;
}
}
private IA _someOptionalDependency;
private IRepositoryA _repoA;
}
[TestFixture]
public class Test
{
[Test]
public void FactoryMethodsShouldWork()
{
var factoryB=container.Resolve<IFactoryB>();
var repoA=container.Resolve<IRepositoryA>();
var someA=repoA.Get(someID);
var B1=factoryB.Create();
var B2=factoryB.Create(someA);
Assert.AreEqual(repoA.GetDefault(),B1.someOptionalDependency);
Assert.AreEqual(someA,B1.someOptionalDependency);
}
}
我正在为工厂使用Typed Factory工具,并将所有工具注册到容器中。 测试没有通过,因为包含器总是解析A的可选依赖项并在其上放置一个新对象,因此someOptionalDependency永远不为null;现在这里是棘手的事情,如果我将依赖设置为[DoNotWire],它在任何情况下都不会解决它(显然),对于这两种工厂方法,我有点需要windsor只从工厂的命名args解决它设施在解决管道中注入而不是从类型解析中注入。有没有办法配置或扩展windsor来做到这一点。我在这里错过了一些观点吗?我可以解决它做一个工厂包装器来设置值并将其设置为[DoNotWire],但我在几个工厂中遇到这个问题,似乎应该是一种让它以更合适的方式工作的方法
提前致谢