c# - 使用 Prism 7 和 Unity 进行参数注入
问题描述
我使用 Jon Wagner 的 Insight.Database 作为我的微 ORM,这意味着我的(数据库)接口没有具体的实现。
我正在尝试将其中一个接口注入到我的 Prism 7 MainWindowViewModel 中,只是为了查看数据库是否存在(在这个阶段 - 显然,我稍后会做更多)。
然而,要么是新的 Unity 把事情搞砸了,要么 Prism 不喜欢我这样做的方式。在过去只有 Unity 的日子里,使用以下代码并不完全是一种乐趣,但相当不错 -
var conn = ConfigurationManager.ConnectionStrings["default"];
container.RegisterType<IConnection>(new InjectionFactory(con
=> conn.AsParallel<IConnection>());
但这是不同的。我承认我是 Prism 的新手,但 IContainerRegistry 上没有任何类似的功能。
通过使用
var container = containerRegistry.GetContainer();
我可以获得基本容器,但这也发生了变化,它遵循其前辈的标准,避开带有示例的体面文档,所以我最好的近似值是这个,至少可以编译。
container.RegisterInstance(typeof(IConnection),
"DbConnection", new InjectionFactory(con =>
connection.AsParallel<IConnection>()), null);
这可以编译,但绝对不会注入。当 AutoWireUp 尝试实例化 MainWindowViewModel 时,我遇到了运行时错误。
任何人都可以指出我的答案或有用的资源吗?
解决方案
通常情况下,继续胡闹已经解决了这个问题。
首先,确保 App.xaml.cs 包含这个
using Unity;
这使我们可以重新访问 RegisterType<T>()。
从那里开始,这就是所需要的。
container.RegisterType<IConnection>(new InjectionFactory(s =>
connection.AsParallel<IConnection>()));
很抱歉打扰你们,伙计们。现在好了。
我已经发布了答案,因为我怀疑我会是最后一个遇到这个问题的人,但我们生活在希望中。
推荐阅读
- msal - Bearer 想要代币,但 OIDC 为你做这一切?
- javascript - 重命名 img 标签并使其自动关闭
- list - 有没有办法在 MS LISTS 的计算列中获取人员姓名?
- reactjs - 具有动态默认值的输入不可编辑
- javascript - CSS中的圆圈不使用javascript跟随鼠标移动
- javascript - JS - .filter 如何处理这个回调?
- javascript - 使用节点为本地 html 创建一个 Web 服务器
- javascript - v-if 解析后如何设置数据值
- php - 在每月 20 日和 3 日之间隐藏取消按钮(Woocommerce 订阅)
- react-native - TextInput 在右侧添加文本 react native