IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> NET IOC -> 正文阅读

[游戏开发]NET IOC

本文用Unity 进行DLL注入.

逻辑不懂.网上看了好多关系unity的文章..慢慢领悟了.

1.先在nuget 上下载?unity 我用的版本是5.11.7

2.首先来一个特性类.DefaultAttribute 继承Attribute

代码:

? ?public class DefaultAttribute : Attribute
? ? {
? ? ? ? public DefaultAttribute(Type registerAs)
? ? ? ? {
? ? ? ? ? ? this.RegisterAs = registerAs;
? ? ? ? }
? ? ? ? public Type RegisterAs { get; private set; }

? ? ? ? /// <summary>
? ? ? ? /// 进行注入
? ? ? ? /// </summary>
? ? ? ? /// <param name="container"></param>
? ? ? ? /// <param name="type"></param>
? ? ? ? public void OnVisit(IUnityContainer container, Type type)
? ? ? ? {
? ? ? ? ? ? if (type.IsAbstract)
? ? ? ? ? ? ? ? throw new ArgumentException(string.Format("虚拟类型{0}不能注册为服务实例。", type));

? ? ? ? ? ? container.RegisterType(RegisterAs, type, new ContainerControlledLifetimeManager());
? ? ? ? }
? ? }

3.注入项目DLL,

public class SingletonUnity
? ? {
? ? ? ? public static void CreateAutomaticInit()
? ? ? ? {
? ? ? ? ? ? #region 自动化 注入
? ? ? ? ? ? string path = AppDomain.CurrentDomain.BaseDirectory + "bin\\OSS.FromeWork.MES.Service.dll";
? ? ? ? ? ? Assembly assembly = Assembly.LoadFile(path);?
? ? ? ? ? ? IList<Type> types = assembly.GetTypes();

? ? ? ? ? ? //定义集合,存储在接口上标注DefaultAttribute的Type
? ? ? ? ? ? IList<KeyValuePair<DefaultAttribute, Type>> items = new List<KeyValuePair<DefaultAttribute, Type>>();
? ? ? ? ? ? foreach (Type type in types)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? foreach (DefaultAttribute attr in type.GetCustomAttributes(typeof(DefaultAttribute), true))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? items.Add(new KeyValuePair<DefaultAttribute, Type>(attr, type));
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? foreach (KeyValuePair<DefaultAttribute, Type> kvp in items)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //进行注入
? ? ? ? ? ? ? ? ? ? (kvp.Key).OnVisit(UnityRoot.Container, kvp.Value);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine("自动注入出错");
? ? ? ? ? ? }
? ? ? ? ? ? #endregion
? ? ? ? }
? ? }
? ? public class UnityRoot
? ? {
? ? ? ? public static IUnityContainer Container = new UnityContainer();
? ? }

4.添加仓储模式.

? ? public interface IBaseRepository<TEntity> where TEntity : class, new()
? ? {
? ? ? ? #region Add
? ? ? ? /// <summary>
? ? ? ? /// 增加单条数据
? ? ? ? /// </summary>
? ? ? ? /// <param name="model">实体对象</param>
? ? ? ? /// <returns>操作是否成功</returns>
? ? ? ? Task<bool> Add(TEntity model);
? ? ? ? /// <summary>
? ? ? ? /// 增加单条数据
? ? ? ? /// </summary>
? ? ? ? /// <param name="model">实体对象</param>
? ? ? ? /// <returns>返回自增长ID</returns>
? ? ? ? Task<int> AddReturnIdentity(TEntity model);
? ? ? ? #endregion
? ? }

? ? [Default(typeof(IBaseRepository<>))]
? ? public class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : class, new()
? ? {
? ? ? ? #region Add
? ? ? ? /// <summary>
? ? ? ? /// 新增数据
? ? ? ? /// </summary>
? ? ? ? /// <param name="model">实体数据</param>
? ? ? ? /// <returns>返回:bool 类型 true or false</returns>
? ? ? ? public virtual async Task<bool> Add(TEntity model)
? ? ? ? {
? ? ? ? ? ? var dbcontext = SqlBase.Client;
? ? ? ? ? ? var i = await Task.Run(() => dbcontext.Insertable<TEntity>(model).ExecuteCommandAsync());
? ? ? ? ? ? return i > 0;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 添加单条数据,并返回 自增列
? ? ? ? /// </summary>
? ? ? ? /// <param name="model">实体数据</param>
? ? ? ? /// <returns>返回:bool 类型 true or false</returns>
? ? ? ? public virtual async Task<int> AddReturnIdentity(TEntity model)
? ? ? ? {
? ? ? ? ? ? var dbcontext = SqlBase.Client;
? ? ? ? ? ? return await Task.Run(() => dbcontext.Insertable<TEntity>(model).ExecuteReturnIdentityAsync());
? ? ? ? }
? ? ? ? #endregion
? ? }

6.把仓储注入到实现的类目当中

public interface IPVDWorksheet
? ? {
? ? ? ? /// <summary>
? ? ? ? /// 新增数据
? ? ? ? /// </summary>
? ? ? ? /// <param name="model"></param>
? ? ? ? /// <returns></returns>
? ? ? ? Task<bool> Add(M_PVDWorksheet model);
? ? ? ? /// <summary>
? ? ? ? /// 新增数据,返回自增长ID
? ? ? ? /// </summary>
? ? ? ? /// <param name="m"></param>
? ? ? ? /// <returns></returns>
? ? ? ? Task<int> AddReturnIdentity(M_PVDWorksheet m);
? ? }

?[Default(typeof(IPVDWorksheet))]
? ? public class PVDWorksheet : IPVDWorksheet
? ? {
? ? ? ? public IBaseRepository<M_PVDWorksheet> DAO;
? ? ? ? /// <summary>
? ? ? ? /// 钩爪函数注入..默认调用参数最多的
? ? ? ? /// </summary>
? ? ? ? /// <param name="_dal"></param>
? ? ? ? public PVDWorksheet(IBaseRepository<M_PVDWorksheet> _dal)
? ? ? ? {
? ? ? ? ? ? DAO = _dal;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 新增数据
? ? ? ? /// </summary>
? ? ? ? /// <param name="m">实体</param>
? ? ? ? /// <returns>可以在这里做AOP 切面编程</returns>
? ? ? ? public async Task<bool> Add(M_PVDWorksheet m)
? ? ? ? {
? ? ? ? ? ? return await DAO.Add(m);
? ? ? ? }
? ? ? ? public async Task<int> AddReturnIdentity(M_PVDWorksheet m)
? ? ? ? {
? ? ? ? ? ? return await DAO.AddReturnIdentity(m);
? ? ? ? }

? ? }

7.调用

private static IPVDWorksheet Dao
? ? ? ? {
? ? ? ? ? ? get
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return UnityRoot.Container.Resolve<IPVDWorksheet>();
? ? ? ? ? ? }
? ? ? ? }

8.在项目启动的时候.调用

?SingletonUnity.CreateAutomaticInit();

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:46:26  更:2021-08-11 12:47:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/1 18:32:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码