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()));
因为它需要一个委托,所以你不一定需要静态类/方法,并且可以内联。
上述就是C#学习教程:Unity:当前类型是一个接口,无法构造分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1003346.html