文档章节

.net core Ninject Ioc 实现

c
 circle_july
发布于 2017/04/12 15:23
字数 198
阅读 122
收藏 0

 环境: .Net Core   Ninject4


主要是因为  在开发.Net Core 相关项目的适合 Ninject4 的StandardKernel 类过时了(过时这种警告,我们都是不看的),所以重写了下Ioc 的实现

public static class Ioc
    {
        private static IReadOnlyKernel _readOnlyKernel;

        static Ioc()
        {
            KernelConfiguration configuration = new KernelConfiguration(GetModules());
            configuration.Settings.Set("InjectAttribute",typeof(DependencyAttribute));

            _readOnlyKernel = configuration.BuildReadonlyKernel();
        }

        private static INinjectModule[] GetModules()
        {
            Assembly assembly = Assembly.Load(new AssemblyName(typeof(Ninject4Test.Ioc).Namespace));
            INinjectModule[] modules = assembly.DefinedTypes
                                        .Where(a => a.GetInterface(nameof(INinjectModule)) != null)
                                        .Select(a=>(INinjectModule)assembly.CreateInstance(a.FullName)).ToArray();

            return modules;
        }

        public static T Get<T>()
        {
            return _readOnlyKernel.Get<T>();
        }
    }

如果用 .Net Standard 的话,是没有System.Reflection.TypeExtensions 这个类库的,需要改改代码

 

public static class Ioc
    {
        private static IReadOnlyKernel _readOnlyKernel;

        static Ioc()
        {
            KernelConfiguration configuration = new KernelConfiguration(GetModules());
            configuration.Settings.Set("InjectAttribute", typeof(DependencyAttribute));

            _readOnlyKernel = configuration.BuildReadonlyKernel();
        }

        private static INinjectModule[] GetModules()
        {
            Assembly assembly = Assembly.Load(new AssemblyName(typeof(DI.Ioc).Namespace));
            INinjectModule[] modules = assembly.DefinedTypes
                                        .Where(a => a.AsType().GetInterfaces().Contains(typeof(INinjectModule)))
                                        .Select(a => (INinjectModule)Activator.CreateInstance(Type.GetType(a.FullName))).ToArray();

            return modules;
        }

        public static T Get<T>()
        {
            return _readOnlyKernel.Get<T>();
        }
    }

 

 

 

© 著作权归作者所有

共有 人打赏支持
c
粉丝 0
博文 5
码字总数 1076
作品 0
温州
程序员
私信 提问
ASP.NET MVC Controller激活系统详解:IoC的应用[下篇]

[上篇]除了通过自定义ControllerFactory的方式引入IoC之外,在使用默认DefaultControllerFactory情况下也可以通过一些扩展使基于IoC的Controller激活成为可能。主要的方式就是自定义Control...

长平狐
2012/09/04
116
0
IOC/AOP随笔目录

在当前软件开发OO设计中,面对软件需求的各种潜在变化,我们可能会采用领域驱动开发,把我们的各个业务逻辑分层次隔离解除耦合,这就出现了N层架构(这面值得是逻辑上的分层,当然我们的逻辑...

zting科技
2017/01/10
0
0
一个简单的小程序演示Unity的三种依赖注入方式

今天写《WCF技术剖析(卷2)》关于《WCF扩展》一章,举了“如何通过WCF扩展实现与IoC框架(以Unity为例)集成”(《通过自定义ServiceHost实现对WCF的扩展[实例篇]》)的例子。为了展示Unity...

长平狐
2012/09/04
270
0
C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理

在很多情况下,我们利用IOC控制反转可以很方便实现一些接口的适配处理,可以在需要的时候切换不同的接口实现,使用这种方式在调用的时候,只需要知道相应的接口接口,具体调用哪个实现类,可...

walb呀
2017/12/04
0
0
软件系统管理类软件的快速开发框架--LCLFramework

LCLFramework是一套在.NET下支持面向领域驱动的软件系统管理类软件的快速开发框架 使用开发框架的好处: 1.框架在技术上为软件系统提供了完整的模式实践 2.框架为团队提供了合理可行的软件开...

匿名
2016/05/30
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

day11

architect刘源源
今天
7
0
论学好Linux系统的超级重要性

不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂...

Linux就该这么学
昨天
6
0
git 使用

1,首先在github配置好信息和仓库,然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2,与远程分支建立连接 git checkout -b test......

天王盖地虎626
昨天
3
0
git checkout 命令详解

在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。 在下面的命令中,使用了一些简写,在这里说明一下: git st # git statusgit ci ...

shzwork
昨天
11
0
【Nginx】Nginx多级代理,获取客户端真实请求IP以及每级代理IP

Nginx多级代理,获取客户端真实请求IP以及每级代理IP 如图所示,每一级nginx里的location配置里需要加上对应的配置,最后一级nginx是直接到应用,测试时为了方便,直接用echo模块去测试,打印...

薛定谔的旺
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部