C# StructureMap异常202未定义默认实例(版本2.61)

C# StructureMap异常202未定义默认实例(版本2.61),c#,asp.net-mvc-2,structuremap,C#,Asp.net Mvc 2,Structuremap,容器的初始化: 获取实例: 控制器 私人IBabyRepository_Babyrepository; { 类尝试DI/Ioc 错误: StructureMap异常代码:202 没有为PluginFamily Domain.Repository.IBabyRepository定义默认实例,域,版本=1.0.0.0,区域性=中性,PublicKeyToken=null 我 我做错了什么?你没有告诉StructureMap如何创建BabyRepository 我认为你的扫描应该是这样的:

容器的初始化:

获取实例:

控制器

私人IBabyRepository_Babyrepository; {

类尝试DI/Ioc

错误:

StructureMap异常代码:202 没有为PluginFamily Domain.Repository.IBabyRepository定义默认实例,域,版本=1.0.0.0,区域性=中性,PublicKeyToken=null


我做错了什么?

你没有告诉StructureMap如何创建BabyRepository

我认为你的扫描应该是这样的:

        Scan(y =>
        {
            y.AssemblyContainingType<IRegistar>();
            y.Assembly(Assembly.GetExecutingAssembly().FullName);
            y.With(new RepositoryScanner());
        })
然后需要对自定义RepositoryScanner进行编码:

public class RepositoryScanner : IRegistrationConvention
{
    public void Process(Type type, Registry registry)
    {
        if (type.BaseType == null) return;

        if (type.GetInterface(typeof(IRepository).Name) != null)
        {
            var name = type.Name;

            registry
               .For<IRepository>()
               .AddInstances(y => y.Instance(new ConfiguredInstance(type).Named(name)));
        }
    }
}

WhatDoIHave输出是否显示为IBabyRepository注册的BabyRepository?另外,显示您试图实例化的控制器的构造函数。WhatDoIHave在strutmap objectfactory容器的函数部分中。它显示哪些接口映射到哪些具体的对象。控制器和构造函数与此类似看起来很好但无论如何,在不必定义每个接口的情况下进行结构图扫描以进行注入是有必要的吗?例如,我会使用通用接口,并在所有我希望定义的接口的所有点上使用它吗?
public class DependencyControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null)
            {
                return base.GetControllerInstance(requestContext, controllerType);
            }

            try
            {
                return ObjectFactory.GetInstance(controllerType) as Controller;
            }
            catch (StructureMapException exception)
            {
                Debug.WriteLine(ObjectFactory.WhatDoIHave());
                throw;
            }
        }
    }
  public BabyController(IBabyRepository babyRepository)
  {
      _babyReposoitory = babyRepository;
  }
public class BabyRepository : IBabyRepository, IRepository<Baby>, IRegistar
{
    Just a Default constructor here();
    code...
}
        Scan(y =>
        {
            y.AssemblyContainingType<IRegistar>();
            y.Assembly(Assembly.GetExecutingAssembly().FullName);
            y.With(new RepositoryScanner());
        })
public class RepositoryScanner : IRegistrationConvention
{
    public void Process(Type type, Registry registry)
    {
        if (type.BaseType == null) return;

        if (type.GetInterface(typeof(IRepository).Name) != null)
        {
            var name = type.Name;

            registry
               .For<IRepository>()
               .AddInstances(y => y.Instance(new ConfiguredInstance(type).Named(name)));
        }
    }
}