如何在数据层中使用Caliburn.Micro SimpleContainer
本文关键字:Caliburn Micro SimpleContainer 数据 | 更新日期: 2023-09-27 18:35:20
也许这是一个愚蠢的问题,但我被困住了。
我正在尝试在整个应用程序中使用 SimpleContainer 作为 IoC,因此在我的数据访问层中,我以这种方式定义了一个引导程序:
public class AppBootstrapper : BootstrapperBase
{
SimpleContainer container;
public AppBootstrapper()
{
Start();
}
protected override void Configure()
{
container = new SimpleContainer();
container.PerRequest<IMyClass, MyClass>();
}
protected override object GetInstance(Type service, string key)
{
var instance = container.GetInstance(service, key);
if (instance != null)
return instance;
throw new InvalidOperationException("Could not locate any instances.");
}
但是我该如何使用它呢?
我只是想得到一个实现并尝试编写:
IMyClass mc = new IoC.GetInstance(IMyClass );
但我没有找到如何
我试过:
SimpleContainer container = new SimpleContainer();
IMyClass mc = new container.GetInstance(IMyClass,null);
和:
IMyClass mc = new IoC.GetInstance(IMyClass, null);
但它们都不起作用。
怎么了?
编辑:
而且,如果我有一个AppBootstrapper.cs对于每个项目来说,所有项目都运行良好还是最佳实践不同?
IMyClass mc = new IoC.GetInstance(IMyClass );
你可以这样做,因为IoC
是一个static
类,所以你不能创建它的新实例,而是可以这样做:
IMyClass mc = IoC.Get<IMyClass>();
然而,这也不是推荐的方法。
在你像这样初始化引导程序之后,假设你有一个这样的SellViewModel
:
public class ShellViewModel {
private IMyClass _mc;
public ShellViewModel(IMyClass mc) {
_mc = mc;
}
}
现在,当Caliburn.Micro尝试实例化ShellViewModel
时,它会注意到构造函数接受IMyClass
的实例,然后它将自动为您创建该类的实例并将其提供给ShellViewModel
。
控制反转的信息,然后阅读SimpleContainer
类的文档,然后阅读文章屏幕,导体和组合以了解整个过程。