将 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
方法被认为是一种反模式,应该避免。
我正在学习 .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
方法被认为是一种反模式,应该避免。