C # Windsor.Исключение Castle не смогло создать экземпляр ApplicatioName.MainWindow

#c# #castle-windsor

#c# #castle-windsor

Вопрос:

Когда я пытаюсь запустить приложение, разработанное на C # с использованием Windsor.Castle как DI Я получаю исключение при запуске и длинную трассировку стека. Последняя строка выглядит следующим образом:

at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler): Exception has been thrown by the target of an invocation.: ComponentActivator: could not instantiate ApplicationName.MainWindow

Одна запись из моего приложения:

at ApplicationName.App.OnStartup(StartupEventArgs e) in D:PathApplicationNameApplicationNameApp.xaml.cs:line 35

Эта строка выглядит следующим образом:

 IShell<IMainWindow> mainProgram = Bootstrapper.Container.Resolve<IShell<IMainWindow>>();
  

Bootstrapper является статическим классом и Container статическим методом, возвращающим экземпляр IWindsorContainer .

IMainWindow и IShell зарегистрированы в классе, реализующем IWindsorInstaller :

 container.Register(Component.For<IShell<IMainWindow>>().ImplementedBy<Shell>().LifestyleTransient());
container.Register(Component.For<IMainWindow>().ImplementedBy<MainWindow>());
  

Во время разработки не было никаких проблем, связанных с этой ошибкой, и на компьютере разработчика по-прежнему нет проблем с запуском приложения, двоичный файл релиза запускается без проблем на компьютере разработчика. Но запуск приложения на другом компьютере вызывает исключение.

MainWindow.xaml.cs имеет только конструктор с одним параметром, IAbstractFactory :

 public MainWindow(IAbstractFactory factory)
        {
            this.InitializeComponent();
            IMainViewModel mainViewModel = factory.Create<IMainViewModel>();
            this.Closing  = mainViewModel.OnWindowClosing;
            this.DataContext = mainViewModel;
        }
  

Я попытался добавить конструктор без параметров, чтобы проверить, работает ли это, но я получаю ту же ошибку.

Другой попыткой решить проблему была регистрация с IShell<MainWindow>> помощью вместо интерфейса. Работает на компьютере разработки, а не на другом компьютере.

Кто-нибудь знает, в чем проблема и как ее решить?

Комментарии:

1. Есть ли какое-либо исключение InnerException?

2. Конечно, внутреннее исключение. Я не регистрирую это прямо сейчас. Я посмотрю