如果您不想使用现成的依赖注入框架或包,您可以手动实现依赖注入。下面是手动实现依赖注入的示例,包括依赖配置和属性注入。
### 1.手动配置依赖
首先,我们需要一个简单的依赖注入容器来管理服务的创建和生命周期。这是一个非常简化的版本:
“c 锐利
公共类SimpleContainer
{
私有只读DictionaryType, Funcobject _registrations=new DictionaryType, Funcobject();
公共无效RegisterTService(FuncTService工厂)
{
_registrations[typeof(TService)]=()=Factory();
}
公共TService ResolveTService()
{
返回(TService)_registrations[typeof(TService)]();
}
}
””
### 2.配置并使用手动依赖注入容器
配置依赖项并在应用程序启动时注入它们。
“c 锐利
使用系统;
使用系统.Windows。
使用Zhaoxi.BMS.ViewModels。
使用兆熙.BMS.基地。
命名空间Zhaoxi.BMS
{
公共部分类应用程序:应用程序
{
公共静态SimpleContainer 容器{ 获取;
protected Override void OnStartup(StartupEventArgs e)
{
Base.OnStartup(e);
配置容器();
var mainWindow=Container.ResolveMainWindow();
var mainViewModel=Container.ResolveMainViewModel();
mainWindow.DataContext=mainViewModel;
mainWindow.Show();
}
私有无效配置容器()
{
容器=新的SimpleContainer();
Container.Register(()=new MainWindow());
Container.Register(()=new MainViewModel { NavCommand=new Command() });
}
}
}
””
### 3.修改`MainViewModel`类以支持属性注入。
修改`MainViewModel`类以支持属性注入。
“c 锐利
使用系统;
使用System.Collections.Generic。
使用System.Linq。
使用系统反射。
使用系统.文本。
使用系统.线程.任务。
使用系统.Windows.输入。
使用兆熙.BMS.基地。
使用Zhaoxi.BMS.Models。
命名空间Zhaoxi.BMS.ViewModels
{
公共类MainViewModel : NotifyBase
{
公共静态ListMainModel arg=new ListMainModel();
#region监控页面数据
公共Liststring BatteryGroup { set }=new Liststring();
#结束区域
私有对象_pageObject;
公共对象PageObject
{
获取{返回_pageObject}
设置{ SetProperty(ref _pageObject, value);
}
私有ICommand _navCommand;
公共ICommand 导航命令
{
获取{返回_navCommand}
放
{
_navCommand=值;
if (_navCommand 是命令命令)
{
命令.DoExecute=SwitchPage;
}
}
}
公共MainViewModel()
{
for (int i=0; i 100; i++)
{
BatteryGroup.Add(i.ToString());
}
}
private void SwitchPage(对象页面)
{
Type type=Assembly.GetExecutingAssembly().GetType(\’朝西.BMS.Views.Pages.\’ + page.ToString());
this.PageObject=Activator.CreateInstance(type);
}
}
}
””
### 4. 验证“Command”类是否实现“ICommand”接口。
确保“Command”类定义如下:
“c 锐利
使用系统;
使用系统.Windows.输入。
命名空间Zhaoxi.BMS.Base
{
公共类命令: ICommand
{
公共事件事件处理程序?
公共bool CanExecute(对象?参数)
{
返回真。
}
公共无效执行(对象?参数)
{
DoExecute?Invoke(参数);
}
公共Actionobject DoExecute { 设置;
公共命令(Actionobject doExecute)
{
执行=执行;
}
公共命令():这个(空)
{
}
}
}
””
概括
通过上面的步骤,我们手动实现了一个简单的依赖注入容器,并用它来注入`MainViewModel`和`Command`。虽然这种方法比使用现成的DI 框架更麻烦,但它演示了依赖注入的基本原理,并且不依赖外部库。
#上面是手动实现依赖注入的例子,包括依赖配置和属性注入。相关内容来源网络仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91314.html