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

得到以下代码开始

public interface IDataContextAsync : IDataContext { Task SaveChangesAsync(CancellationToken cancellationToken); Task SaveChangesAsync(); } public partial class DB1Context : DataContext{ } public partial class DB2Context : DataContext{ } 

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

  public static void RegisterTypes(IUnityContainer container) { container .RegisterType("DB1Context", new PerRequestLifetimeManager()) //.RegisterType("DB2Context", new PerRequestLifetimeManager()) .RegisterType( new PerRequestLifetimeManager(), new InjectionConstructor(new object[] {new RepositoryFactories()}) ) . . . . } 

我收到以下错误:

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

了解这个命名实例不能与我的UnityConfig一起使用。 任何想法的家伙?

提前致谢

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

 Current.Resolve() 

什么时候需要像这样解决

 Current.Resolve("DB1Context"); 

它不会有任何额外的逻辑,因为它知道这一点。

如果你想有条件地解决你可以使用注射工厂:

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

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

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

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