.net framework和.net Core都可以用的Unity依赖注入框架的演示

勇哥注:

经过测试,在.net8.0下,用vs2022引用Unity5.11最新版本的包,是没有问题的。功能上至少基本di功能是没有问题的。



Unity的di演示


注意下面MyController器的构造函数中,两个参数是由框架注入的对象。

MyController的构造只管要对象,至于是谁传入的对象、这个对象具体是个什么东西MyController是不知道的,都是由框架决定的。


源码:

using Unity;
using Unity.Lifetime;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var container=new UnityContainer();
            container.RegisterType<MyController, MyController>();
            container.RegisterType<ILog,MyLog>();
            container.RegisterType<IConfig,MyConfig>();
            container.RegisterType<IStorage,MyStorage>();

            var myclass = container.Resolve<MyController>();
            myclass.Test();
        }
    }

    public class MyController
    {
        private readonly ILog log;
        private readonly IStorage storage;

        public MyController(ILog log, IStorage storage)
        {
            this.log = log;
            this.storage = storage;
        }

        public void Test()
        {
            log.Log("开始连接数据库");
            storage.Save();
            log.Log("关闭数据库连接");
        }
    }

    public interface ILog
    {
        void Log(string message);
    }

    public class MyLog : ILog
    {
        public void Log(string message)
        {
            Console.WriteLine(message);
        }
    }

    public interface IConfig
    {
        string Read(string message);
    }

    public class MyConfig : IConfig
    {
        public string Read(string message)
        {
            return $"从文件读取的配置项[{message}]";
        }
    }

    public interface IStorage
    {
        void Save();
    }

    public class MyStorage : IStorage
    {
        private readonly IConfig config;
        public MyStorage(IConfig config)
        {
            this.config = config;
        }

        public void Save()
        {
            Console.WriteLine("文件存储成功");
        }
    }
}



关于Unity的几个要注意的问题

(1)如果像下面这样写会报错。

Unity中如果你注册类和它的实例时用了命名,则不可以使用ResolvAll<T>进行解析(它只能用于未命名的注册类)。

你必须使用Resolv<T>解析。

container.RegisterType<DockContent, AddHardwareForm>("AddHardwareForm");
container.RegisterType<DockContent, PgAxisPrameterForm>("PgAxisPrameterForm");


container.ResolveAll<DockContent>();



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-05-29 10:21:11 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864