将 Ninject 个模块转换为 Autofac

Convert Ninject Modules to Autofac

我正在学习 .NetCore 和 Autofac,我对如何将 Ninject 模块转换为 Autofac 模块有疑问。

让我们看一些代码:

模块:

using Ninject.Modules;

namespace v0.CrossCutting.Ninject.Domain.Data
{
    using v0.Domain.Data.Model.Interfaces;
    using v0.Domain.Data.Model.Classes;

    public class Model : NinjectModule
    {
        public override void Load()
        {
            try
            {
                Bind<IConfig>().To<Config>();
            }
            catch
            {
                throw;
            }
        }
    }
}

注册:

using Ninject;
using Ninject.Modules;

namespace v0.CrossCutting.Ninject
{
    public static class Container
    {
        private static IKernel Kernel;

        static Container()
        {
            INinjectModule[] NinjectModules = new INinjectModule[]
            {
                new Domain.Data.Model()
            };

            Kernel = new StandardKernel(NinjectModules);
        }

        public static TModel Resolve<TModel>()
        {
            try
            {
                return Kernel.Get<TModel>();
            }
            catch
            {
                throw;
            }
        }
    }
}

我在互联网上搜索了另一个堆栈溢出问题,但我仍然不知道该怎么做。

谢谢。

Autofac 模块在 Autofac documentation 中进行了描述。我对 Ninject 不是很熟悉,但看起来你正在尝试实现这样的目标:

模块 class 必须实现 Autofac 的 Module class 并覆盖 Load 方法,类似于 Ninject:

public class ModelModule : Module
{
    public override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<Config>().As<IConfig>();
    }
}

稍后,您必须在容器本身中注册您的模块:

public class ContainerConfig
{
    public IContainer ConfigureAutofac()
    {
        var containerBuilder = new ContainerBuilder();
        containerBuilder.RegisterModule(new ModelModule());

        return containerBuilder.Build();
    }
}

顺便说一句,静态 Container class 与 public 和静态 Resolve 方法被认为是一种反模式,应该避免。