У меня есть следующая ситуация в приложении WPF:
public class ExpenseView : UserControl, IAccountingView {}
// just a marker, the contract is in IViewWindow
public interface IAccountingView : IViewWindow {}
И мне нужно иметь возможность зарегистрировать ExpenseView, чтобы его можно было разрешить двумя способами: как конкретный тип, ExpenseView и как IAccountingView (возможно, как еще один интерфейс).
Я регистрирую такие типы:
// I need a collection of IViewWindow to be used
Container.Register( Classes.FromAssemblyInDirectory( myTypes )
.BasedOn<IViewWindow>()
.WithServiceFromInterface()
.LifestyleTransient()
);
// all other types don't have interfaces, are used as concrete types.
Container.Register( Classes.FromAssemblyInDirectory( myTypes )
.Where( type => type.IsPublic )
.WithServiceSelf()
.LifestyleTransient()
);
Теперь это работает, создаются экземпляры ExpenseView и всех других типов, за исключением случаев, когда мне нужно использовать
var newInstance = container.Resolve( iView.ViewType );
чтобы получить другой экземпляр, где iView.ViewType — это конкретный тип ExpenseView (согласно примеру), я получаю это исключение:
'Castle.MicroKernel.ComponentNotFoundException'
No component for supporting the service ExpenseView was found.
Любые идеи, почему это происходит и как заставить это работать?