首页> C#> Unity:当前类型是一个接口,不能被构造
作者:互联网
下面的代码开始
public interface IDataContextAsync : IDataContext
{
Task<int> SaveChangesAsync(CancellationToken cancellationToken);
Task<int> SaveChangesAsync();
}
public partial class DB1Context : DataContext{ }
public partial class DB2Context : DataContext{ }
以下是UnityConfig文件.注意:我正在为ASP.Net MVC使用Nuget引导程序,以下是我的UnityConfig文件
public static void RegisterTypes(IUnityContainer container)
{
container
.RegisterType<IDataContextAsync, DB1Context>("DB1Context", new PerRequestLifetimeManager())
//.RegisterType<IDataContextAsync, DB2Context>("DB2Context", new PerRequestLifetimeManager())
.RegisterType<IRepositoryProvider, RepositoryProvider>(
new PerRequestLifetimeManager(),
new InjectionConstructor(new object[] {new RepositoryFactories()})
)
.
.
.
.
}
而且我得到以下错误:
The current type, Repository.Pattern.DataContext.IDataContextAsync, is
an interface and cannot be constructed. Are you missing a type
mapping?
了解该命名实例不适用于我的UnityConfig.
有想法吗?
提前致谢
解决方法:
正在执行解析的服务定位器(在构造函数要求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()));
因为它需要委托,所以您不一定需要静态的类/方法,而是可以内联地执行它.
标签:asp-net-web-api,unity-container,c,asp-net-mvc 来源: https://codeday.me/bug/20191027/1947236.html