У меня есть следующие элементы в моем решении:
public interface IHandle<TEvent>
{
void Handle(TEvent event);
}
public interface IPresenter<TView>
{
}
public abstract class Presenter<TView> : IPresenter<TView>
{
protected view;
public TView View
{
set { view = value;}
}
// snip...
}
public interface IMyPresenter : IPresenter<IChangeRequestReviewManagementView>
{
// snip...
}
public class MyPresenter : Presenter<MyView>, IMyPresenter, IHandle<CustomEvent>
{
// snip...
}
И у меня есть следующая регистрация для регистрации докладчиков в Виндзоре:
container.Register(AllTypes.Of(typeof(IPresenter<>))
.FromAssemblyNamed("Project.Presentation")
.WithService.Select((type, baseType) => new Type[] {GetInterfaceFromConvention(type)})
.Configure(config => config.LifeStyle.PerWebRequest));
private static Type GetInterfaceFromConvention(Type type)
{
return (from found in type.GetInterfaces()
where found.Name.Equals("I" + type.Name)
select found).FirstOrDefault();
}
Это отлично работает, и я могу решитьдокладчики на моих страницах используют:
public IMyPresenter Presenter
{
set
{
presenter = value;
}
}
Используя это http://code.google.com/p/sneal/wiki/AspNetWindsorModule, проблема возникает, когда я пытаюсь подключить поддержку обработки событий, предоставляемую через отдельный EventAggregator, который вызывает реализации IHandle <>.Я добавил эту регистрацию:
container.Register(AllTypes.Of(typeof(IHandle<>))
.FromAssemblyNamed("Project.Presentation")
.BasedOn(typeof(IHandle<>))
.WithService.Base());
Поскольку это работает для других областей, которые реализуют IHandle <>, но после добавления этого контейнера контейнер больше не может разрешать IMyPresenter в MyPresenter, поэтому я должен что-то упустить?