Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将AutoMapper与Ninject.Web.Mvc一起使用? 安装程序_C#_Dependency Injection_Inversion Of Control_Ninject_Automapper - Fatal编程技术网

C# 如何将AutoMapper与Ninject.Web.Mvc一起使用? 安装程序

C# 如何将AutoMapper与Ninject.Web.Mvc一起使用? 安装程序,c#,dependency-injection,inversion-of-control,ninject,automapper,C#,Dependency Injection,Inversion Of Control,Ninject,Automapper,我有一个设置自动映射映射的AutoMapperConfiguration静态类: static class AutoMapperConfiguration() { internal static void SetupMappings() { Mapper.CreateMap<long, Category>.ConvertUsing<IdToEntityConverter<Category>>(); } } IdToEn

我有一个设置自动映射映射的
AutoMapperConfiguration
静态类:

static class AutoMapperConfiguration()
{
    internal static void SetupMappings()
    {
        Mapper.CreateMap<long, Category>.ConvertUsing<IdToEntityConverter<Category>>();
    }
}
IdToEntityConverter
在其构造函数中获取一个
IRepository
,以便通过访问数据库将ID转换回实际实体。请注意,它没有默认构造函数

在我的ASP.NET的
Global.asax
中,这是我在ApplicationStarted()和
CreateKernel()上的
功能:

仍在获取
NullReferenceException

问题:
我的问题是,如何让Ninject将
IRepository
注入
IdToEntityConverter

您必须让AutoMapper访问DI容器。我们使用StructureMap,但我想下面的内容应该适用于任何DI

我们使用它(在我们的一个引导程序任务中)

专用IContainer\u容器//结构映射容器
初始化(映射=>
{
map.ConstructionServicesUsing(_container.GetInstance);
AddProfile();
}

@ozczecho的答案是正确的,但我发布了Ninject版本的代码,因为它有一个小警告让我们注意了一段时间:

IKernel kernel = null; // Make sure your kernel is initialized here

Mapper.Initialize(map =>
{
    map.ConstructServicesUsing(t => kernel.Get(t));
});

您不能只传入
kernel.Get
map.ConstructionServicesUsing
,因为该方法除了类型之外还有一个
params
参数。但是由于params是可选的,您可以只创建lambda表达式来生成一个匿名函数来获取所需的内容。

如何初始化
kernel
protected override void OnApplicationStarted()
{
    // stuff that's required by MVC
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);

    // our setup stuff
    AutoMapperConfiguration.SetupMappings();
}

protected override IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Bind<IRepository>().To<NHibRepository>();

    return kernel;
}
public class RepositoryController : Controller
{
    static RepositoryController()
    {
        AutoMapperConfiguration.SetupMappings();
    }
}
    private IContainer _container; //Structuremap container

    Mapper.Initialize(map =>
    {
        map.ConstructServicesUsing(_container.GetInstance);
        map.AddProfile<MyMapperProfile>();
    }
IKernel kernel = null; // Make sure your kernel is initialized here

Mapper.Initialize(map =>
{
    map.ConstructServicesUsing(t => kernel.Get(t));
});