Я использую метод, описанный Бояном Резником в этом question, чтобы разрешить экземпляры классов, которые не зарегистрированы в контейнере Windsor. Проблема в том, что я не хочу, чтобы эти классы были доступны как «службы» для других разрешенных экземпляров.
Например, учитывая следующие классы:
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>();
Но я не хочу, чтобы новый экземпляр Order вводился в свойство CurrentOrder SomeOtherThing. По сути, я хочу, чтобы контейнер создавал экземпляр, чтобы зависимости могли быть внедрены, но я не хочу, чтобы классы были доступны для внедрения в другие классы.
Я не против писать дополнительные расширения для контейнера, чтобы добиться этого, если кто-то может указать мне правильное направление.