Unity:当前类型是一个接口,无法构造

时间:2015-10-13 03:37:42

标签: c# asp.net-mvc asp.net-web-api unity-container

以下代码开头

rake db:migrate

以下是UnityConfig文件。注意:我正在使用Nuget bootstrapper for ASP.Net MVC,下面是我的UnityConfig文件

public interface IDataContextAsync : IDataContext
{
    Task<int> SaveChangesAsync(CancellationToken cancellationToken);
    Task<int> SaveChangesAsync();
}

public partial class DB1Context : DataContext{ }

public partial class DB2Context : DataContext{ }

我收到了以下错误:

  

当前类型Repository.Pattern.DataContext.IDataContextAsync是   一个接口,无法构造。你错过了一个类型吗?   映射?

了解此命名实例不适用于我的UnityConfig。 任何想法的人?

提前致谢

1 个答案:

答案 0 :(得分:4)

正在进行解析的服务定位器(在构造函数请求IDataContextAsync之后)可能正在尝试解决此问题:

Current.Resolve<IDataContextAsync>()

需要像这样解决时

Current.Resolve<IDataContextAsync>("DB1Context");

并且没有任何额外的逻辑可以让它知道。

如果您想有条件地解决问题,可以使用注射工厂:

   public static class Factory
   {
        public static IDataContextAsync GetDataContext()
        {
            if (DateTime.Now.Hour > 10)
            {
                return new DB1Context();
            }
            else
            {
                return new DB2Context();
            }
        }
    }

..并注册IDataContextAsync,如下所示:

Current.RegisterType<IDataContextAsync>(new InjectionFactory(c => Factory.GetDataContext()));

因为它需要一个委托,所以你不一定需要静态类/方法,并且可以内联。