我使用Bojan Resnik在this question中描述的方法来解析未在Windsor容器中注册的类的实例。问题是我不希望这些类作为“服务”提供给其他已解决的实例。Castle IoC - 如何防止注册组件被解析为依赖关系?
例如,给出以下类:
class Order
{
public Order(ITaxCalculator tc)
{
// ...
}
}
class SomeOtherThing
{
public SomeOtherThing(ISomeOtherService sos)
{
// ...
}
Order CurrentOrder
{
get;
set;
}
}
static class WindsorExtensions
{
public static object Create(this IWindsorContainer container, Type type)
{
if (!type.IsClass)
{
throw new ArgumentException("not class", "type");
}
if (!container.Kernel.HasComponent(type))
{
container.Kernel.AddComponent(type.FullName, type, LifestyleType.Transient);
}
return container.Resolve(type);
}
public static T Create<T>(this IWindsorContainer container)
{
return (T)ResolveType(container, typeof(T));
}
}
我希望能够说:
Order order = container.Create<Order>();
SomeOtherThing thing = container.Create<SomeOtherThing>();
但我不想订购的新实例获得注入到SomeOtherThing的CurrentOrder属性。基本上,我希望容器创建实例,以便可以注入依赖关系,但我不希望这些类可用于注入其他类。
为了达到这个目标,我不介意为容器写额外的扩展名,只要有人能指出我正确的方向。