我有一个组件,构造器需要很长时间才能执行(它使用SAPBOBSdll连接到SAP Business One数据库)在我的Prism应用程序中。我在Unity容器中注册它:
_container.RegisterType<IConnection, Connection>(new ContainerControlledLifetimeManager());
当我尝试解析此组件时,需要很长时间(大约15秒)。使用不同的线程预先解析组件是不好的做法,所以当我尝试使用它时它不会阻止我的程序?我在注册行之后这样做并且效果很好,但我对它有一种奇怪的感觉。
new Task(()=> _container.Resolve<IConnection>()).Start();
这样做是否可以,或者我应该采取其他方式吗?
答案 0 :(得分:2)
您建议的解决方案听起来不错,特别是如果您将该代码放在Module的Initialize()方法下,并确保在可用时加载模块(而不是按需)。
也许为了让你对其他读者的代码更加明确,我会写下以下内容:
new Task(()=> _container.RegisterInstance<IConnection>(_container.Resolve<Connnection>())).Start();
这使读者明确表示您正在明确解析,以便将该实例注册为单身,以便将来解析该类型。