Caliburn.micro中在哪里依赖注入
时间: 2024-03-13 21:42:43 浏览: 13
Caliburn.Micro 使用的依赖注入框架是 Simple Container,它是一个轻量级的 IOC 容器。在 Caliburn.Micro 中,可以通过在 App.xaml.cs 文件中重写 Configure 方法来配置 Simple Container 容器,并进行依赖注入。例如:
```csharp
protected override void Configure()
{
container.Singleton<IWindowManager, WindowManager>();
container.Singleton<IEventAggregator, EventAggregator>();
container.RegisterSingleton(typeof(MainViewModel), null, typeof(MainViewModel));
container.RegisterPerRequest(typeof(DetailsViewModel), null, typeof(DetailsViewModel));
}
```
这段代码注册了 IWindowManager 和 IEventAggregator 接口的实现为单例,注册了 MainViewModel 类型的实例为单例,注册了 DetailsViewModel 类型的实例为每个请求一个新的实例。这样,在应用程序运行时,就可以通过 IOC.Get<T> 方法获取相应的实例,从而实现依赖注入。
相关问题
Caliburn.micro是怎么实现依赖注入 ImportingConstructor
在 Caliburn.Micro 中,`ImportingConstructor` 是一个特性,用于标记类的构造函数,表示该构造函数需要进行依赖注入。当容器需要创建该类的实例时,会自动将标记了 `Import` 特性的参数注入到构造函数中。
例如,假设有以下类:
```csharp
public interface IService
{
void DoSomething();
}
public class Service : IService
{
public void DoSomething()
{
Console.WriteLine("Do something");
}
}
public class ViewModel : Screen
{
private readonly IService _service;
[ImportingConstructor]
public ViewModel(IService service)
{
_service = service;
}
public void DoWork()
{
_service.DoSomething();
}
}
```
在上面的代码中,`ViewModel` 类有一个需要进行依赖注入的构造函数,并使用了 `ImportingConstructor` 特性进行标记。`IService` 是一个接口,`Service` 是实现该接口的类。
当需要创建 `ViewModel` 类的实例时,Simple Container 会自动扫描程序集中标记了 `Export` 特性的类和接口,并将它们注册到容器中。因此,当需要创建 `ViewModel` 实例时,Simple Container 会自动将 `Service` 类的实例注入到 `ViewModel` 的构造函数中。这样,在调用 `ViewModel` 实例的 `DoWork` 方法时,就可以通过 `_service` 成员变量访问 `Service` 类的实例了。
总之,Caliburn.Micro 中的 `ImportingConstructor` 特性可以帮助我们进行构造函数注入,使得容器能够自动将依赖项注入到类的构造函数中,从而实现依赖注入。
Caliburn.micro是怎么实现依赖注入,可以通过Export
Caliburn.Micro 中的依赖注入是基于 Simple Container 的。Simple Container 是一个轻量级的 IOC 容器,它支持基于约定的依赖注入,也支持基于属性的依赖注入。
在 Caliburn.Micro 中,可以通过在 ViewModel 中使用 `Export` 特性来标记需要注入的属性或构造函数参数,例如:
```csharp
public class MainViewModel : Screen
{
private readonly IEventAggregator _eventAggregator;
[ImportingConstructor]
public MainViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
[Import]
public IWindowManager WindowManager { get; set; }
}
```
在上面的代码中,`ImportingConstructor` 特性标记了 MainViewModel 的构造函数,表示需要注入 IEventAggregator 接口的实例。`Import` 特性标记了 WindowManager 属性,表示需要注入 IWindowManager 接口的实例。
这样,在运行时,Simple Container 就会自动扫描程序集中标记了 `Export` 特性的类和接口,并将它们注册到容器中。当需要获取某个实例时,可以通过 IOC.Get<T> 方法从容器中获取相应的实例。