Dot*_*nfo 4 c# asp.net-mvc unity-container asp.net-web-api
下面的代码开始
public interface IDataContextAsync : IDataContext
{
Task<int> SaveChangesAsync(CancellationToken cancellationToken);
Task<int> SaveChangesAsync();
}
public partial class DB1Context : DataContext{ }
public partial class DB2Context : DataContext{ }
Run Code Online (Sandbox Code Playgroud)
以下是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()})
)
.
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
而且我得到以下错误:
当前类型Repository.Pattern.DataContext.IDataContextAsync是一个接口,无法构造。您是否缺少类型映射?
了解该命名实例不适用于我的UnityConfig。有想法吗?
提前致谢
正在执行解析的服务定位器(在构造函数要求IDataContextAsync之后)可能正在尝试解决以下问题:
Current.Resolve<IDataContextAsync>()
Run Code Online (Sandbox Code Playgroud)
当它需要这样解决时
Current.Resolve<IDataContextAsync>("DB1Context");
Run Code Online (Sandbox Code Playgroud)
而且它不会内置任何额外的逻辑。
如果要有条件解决,可以使用注入工厂:
public static class Factory
{
public static IDataContextAsync GetDataContext()
{
if (DateTime.Now.Hour > 10)
{
return new DB1Context();
}
else
{
return new DB2Context();
}
}
}
Run Code Online (Sandbox Code Playgroud)
..并像这样注册IDataContextAsync:
Current.RegisterType<IDataContextAsync>(new InjectionFactory(c => Factory.GetDataContext()));
Run Code Online (Sandbox Code Playgroud)
因为它需要委托,所以您不一定需要静态的类/方法,而是可以内联地执行它。
| 归档时间: |
|
| 查看次数: |
19904 次 |
| 最近记录: |