我有一个IModule,如下:
class Child(Base):
...
parent_id = Column(Integer, ForeignKey('parent.id', ondelete='CASCADE'))
在6.3中,我将覆盖public class UserModule : IModule
{
private readonly IRegionManager _regionManager;
public UserModule(IRegionManager regionManager)
{
_regionManager = regionManager;
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.Register<IUserCommandHandler, DisplaySettingsCommandHandler>(nameof(DisplaySettingsCommandHandler));
containerRegistry.Register<IUserCommandHandler, HelpCommandHandler>(nameof(HelpCommandHandler));
containerRegistry.Register<IEnumerable<IUserCommandHandler>, IUserCommandHandler[]>();
}
public void OnInitialized(IContainerProvider containerProvider)
{
AddCommandHandlers(containerProvider);
AddViews();
}
private void AddCommandHandlers(IContainerProvider containerProvider)
{
var shell = (Window)_regionManager.Regions[Constants.EditRegion].Context;
var commandHandlers = containerProvider.Resolve<IUserCommandHandler[]>();
foreach (var commandHandler in commandHandlers)
{
commandHandler.Initialize(shell);
}
}
private void AddViews()
{
_regionManager.RegisterViewWithRegion(Constants.WindowCommandsRegion, typeof(CommandPanel));
_regionManager.RegisterViewWithRegion(Constants.FlyoutControlsRegion, typeof(SettingsFlyout));
_regionManager.RegisterViewWithRegion(Constants.FlyoutControlsRegion, typeof(DocumentStructureFlyout));
}
}
方法并查询Initialize
属性,在我的情况下为regionManager['name'].Context
实例。
在7.0之前的版本中,使用Shell
代替。问题是OnIntialized
为空。这是预期的/已知的问题吗?
我的目标是在模块的外壳程序中注册一个键盘命令处理程序。也许还有另一种更合适的方法可以做到这一点?我愿意提出建议。