public static class IOCOperation
{
private static IocContainerBuilder _iocBuilder = new IocContainerBuilder();
private static IContainer _icoContainer;
/// <summary>
/// IOC 静态对象
/// </summary>
public static IContainer IocContainer
{
get
{
return _icoContainer;
}
set
{
_icoContainer = value;
}
}
/// <summary>
/// 初始化容器服务
/// </summary>
public static void InitService()
{
try
{
//注册平台 基于IService的服务平台
_iocBuilder.RegisterType<PlatformService>(LifeTimeType.Singleton);
//注册管理模块 也是基于IService的服务平台(IManagement 实现 IService)
_iocBuilder.RegisterType<IManagement, ManagementService>(LifeTimeType.Singleton);
//注册动态链接库 这是可以处理自定义类型的服务
LoadDynamicLibrary();
//创建容器
IocContainer = _iocBuilder.Build();
Globals.IocContainer = IocContainer;//给静态变量,提供全局访问
//获取所有注册的服务,基于IService的实现
//然后调用服务的启动方法
var services = IocContainer.GetAllService();
foreach (var service in services)
{
try
{
service.OnStart();
}
catch (Exception ex)
{
LogOperate.Start($"启动容器中的服务发生异常,\r\n" + ex.ToString());
}
}
//其余自定义类型的服务,则自行处理
//例如:
var device=IocContainer.Get<IDevice>();
}
catch (Exception ex)
{
LogOperate.Error("InitService 发生异常", ex);
}
}
/// <summary>
/// 加载动态链接库
/// </summary>
private static void LoadDynamicLibrary()
{
try
{
//注册实现了IService的服务
List<Type> services = DynamicLibraryOperation.FindService();
foreach (var service in services)
{
_iocBuilder.RegisterType(service, service.FullName, LifeTimeType.Singleton);
}
//自定义类型 服务的注册
//例如下面的IDevice
Type device = DynamicLibraryOperation.FindDevice();
if (device != null)
{
_iocBuilder.RegisterType(typeof(IDevice),device,"", LifeTimeType.Singleton);
}
}
catch (Exception ex)
{
LogOperate.Error("LoadDynamicLibrary 发生异常", ex);
}
}
/// <summary>
/// 停止容器中所有的服务
/// </summary>
public static void StopService()
{
try
{
if (IocContainer != null)
{
//获取所有注册的服务,基于IService的实现
//然后调用服务的停止方法
var services = IocContainer.GetAllService();
foreach (var service in services)
{
try
{
service.OnStop();
}
catch (Exception ex)
{
LogOperate.Start($"停止容器中的服务发生异常,\r\n" + ex.ToString());
}
}
//其余自定义类型的服务,则自行处理
}
}
catch (Exception ex)
{
LogOperate.Error("StopService 发生异常", ex);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
C# 自行实现的ICO容器代码
共38个文件
cs:12个
cache:8个
dll:6个
需积分: 5 0 下载量 52 浏览量
2024-03-06
14:10:08
上传
评论
收藏 67KB RAR 举报
温馨提示
C# 代码实现的IOC容器功能,借鉴大佬写的,自己在优化了一些自定义的功能,可以直接引用到项目中,有示例代码。
资源推荐
资源详情
资源评论
收起资源包目录
IOC.rar (38个子文件)
IOC
obj
Release
IOC.pdb 42KB
DesignTimeResolveAssemblyReferencesInput.cache 2KB
IOC.csproj.CoreCompileInputs.cache 66B
.NETFramework,Version=v4.6.1.AssemblyAttributes.cs 214B
TempPE
IOC.csproj.FileListAbsolute.txt 378B
IOC.csproj.AssemblyReference.cache 1KB
IOC.dll 9KB
x64
Debug
IOC.pdb 46KB
IOC.csproj.CoreCompileInputs.cache 66B
.NETFramework,Version=v4.6.1.AssemblyAttributes.cs 214B
TempPE
IOC.csproj.FileListAbsolute.txt 546B
IOC.csproj.AssemblyReference.cache 4KB
IOC.dll 8KB
Debug
IOC.pdb 46KB
DesignTimeResolveAssemblyReferencesInput.cache 2KB
IOC.csproj.CoreCompileInputs.cache 66B
.NETFramework,Version=v4.6.1.AssemblyAttributes.cs 214B
TempPE
IOC.csproj.FileListAbsolute.txt 522B
IOC.csproj.AssemblyReference.cache 1KB
IOC.dll 9KB
IocContainerBuilder.cs 3KB
IocContainer.cs 2KB
ServiceCollection.cs 2KB
.vs
IOC.csproj.dtbcache.json 3KB
ServiceDescriptor.cs 2KB
LifeTimeType.cs 325B
bin
Release
IOC.pdb 42KB
IOC.dll 9KB
x64
Debug
IOC.pdb 46KB
IOC.dll 8KB
Debug
IOC.pdb 46KB
IOC.dll 9KB
Properties
AssemblyInfo.cs 1KB
Interface
IService.cs 341B
IServiceCollection.cs 263B
IContainer.cs 727B
IOC.csproj 3KB
使用示例.txt 4KB
共 38 条
- 1
资源评论
Rotion_深
- 粉丝: 96
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功