#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. Конечно, внутреннее исключение. Я не регистрирую это прямо сейчас. Я посмотрю