2012-03-22 2 views
1

Я немного изменил архитектуру нашего приложения, и IWindsorContainer больше не может разрешить All.Замок Виндзор не может быть разрешен Все, если интерфейс находится за 2 абстрактными базовыми классами

Это была старая архитектура, которая сделала работу:

public abstract class ServiceBase : IService {} 
public class TrainFileService : ServiceBase {} 

И это новая архитектура, которая ResolveAll не решает FileProcessorScheduledService:

public abstract class ServiceBase : IService {} 
public abstract class FileServiceBase : ServiceBase {} 
public class TrainFileService : FileServiceBase {} 

Итак, я представил еще один абстрактный класс ....

Код, используемый для решения всех вопросов для старого и нового способа:

IService[] _services = Program.IocContainer.ResolveAll<IService>(); 

Код, используемый для регистрации TrainFileService для старого и нового способа является:

<castle> 
<components> 
    <component id="TrainFileService" 
      lifestyle="singleton" 
      service="Blah.Service.Services.IService, Blah.Service" 
      type="Blah.Service.Services.TrainFileService , Blah.Service"> 
    </component> 

Благодаря

+0

Как вы регистрируете 'TrainFileService'? –

+0

Последний фрагмент кода используется для регистрации TrainFileService (IService [] _services = Program.IocContainer.ResolveAll ();). Это работало по-старому, но не по-новому. –

+0

Как вы его разрешаете (вытащите * из * контейнера). Не то, как вы зарегистрируете его (получите его * в * контейнер). –

ответ

0

Как отметил Крис в комментариях, не было на самом деле ничего плохого в том, как я имел изменила архитектуру.

Проблема была в другом месте. А именно, я не зарегистрировал логическое значение в конструкторе ...

Смежные вопросы