.net core Ninject Ioc 实现

 环境: .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>();
        }
    }

 

 

 

转载于:https://my.oschina.net/u/1451579/blog/877643

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值