如何使用TypedFactoryFacility生成与下面指定的相同的输出?
public class Something
{
public void Initialize(Whatever instance) {}
}
public interface ISomethingFactory
{
Something Create(Whatever instance);
}
internal class SomethingFactory : ISomethingFactory
{
private readonly IWindsorContainer _container;
public SomethingFactory(IWindsorContainer container)
{
_container = container;
}
public Something Create(Whatever instance)
{
Something item = _container.Resolve<Something>();
item.Initialize(instance);
return item;
}
}
所以我想用代理生成的ITypedFactoryFacility替换手动工厂,但我找不到在创建后在已解析组件上调用某些东西的方法。我查看了委托问题,但是您没有从自定义委托问题引用CreationContext,因此无法使用。我当然可以将依赖项移到ctor并提供一个ctor覆盖,但我认为当你想传达非可选的依赖项时属性是好的。
答案 0 :(得分:2)
创建时不需要在实例上调用东西 - 当工厂方法签名中的参数名称与可以注入的内容相匹配时,Windsor会自动注入东西 - 是构造函数参数或公共财产......简短的例子(使用公共财产):
interface ISomeFactory
{
Something CreateSomething(object dataSource);
}
class Something
{
public object DataSource { get; set; }
}
鉴于这些注册如下:
container.Register(Component.For<ISomeFactory>().AsFactory(),
Component.For<Something>().Lifestyle.Transient)
您可以像这样解决Something
的实例:
var aintThatSomething = someFactory.CreateSomething(new [] {"ZOMG!", "w00t!"});
请记住,如果与Something
实例相关联的负担中的某些内容需要停用,则您还需要在工厂中提供适当的Release
方法。