I'm learning now .NetCore and Autofac and I have a doubt about how to convert Ninject Modules to Autofac Modules.
Let's see some code:
Module:
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;
}
}
}
}
Register:
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;
}
}
}
}
I searched on internet and another stack overflow questions but I still couldn't figure it out how to do it.
Thanks.
Autofac Modules are described in Autofac documentation. I am not very familiar with Ninject, but it seems you are trying to achieve something like this:
The module class must implement Autofac's Module
class and override Load
method, similarly to Ninject:
public class ModelModule : Module
{
public override void Load(ContainerBuilder builder)
{
builder.RegisterType<Config>().As<IConfig>();
}
}
Later on, you have to register your module within container itself:
public class ContainerConfig
{
public IContainer ConfigureAutofac()
{
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterModule(new ModelModule());
return containerBuilder.Build();
}
}
Btw, static Container
class with public and static Resolve
method is considered an anti-pattern and should be avoided.