我正在使用反向poco从sql数据库创建实体。我使用的tt脚本来自EF教程复数网站上的。在Windows控制台应用程序中,我使用Autofac依赖注入ddbcontext接口ISCDInnoPRDDataLayerDbContext:
公共局部类SCDInnoPRDDataLayerDbContext:Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext,ISCDInnoPRDDataLayerDbContext
以及将把该接口作为输入的类。 公共类DLScdHopDataNarRepository:
DLScdBaseRepository<Read_Only_HopDataNar>,
IDLScdHopDataNarRepository
{
public DLScdHopDataNarRepository(ISCDInnoPRDDataLayerDbContext dataLayerDbContext)
: base(dataLayerDbContext)
{
}
当我解析DLScdHopDataNarRepository类时,Autofac引发异常。 SCDInnoPRDDataLayerDbContext类的构造函数参数上有例外。
例外:
调用类型为“ SCDInnoPRDDataLayerDbContext”的构造函数“ Void .ctor(System.String)”时引发了异常。
在SCDInnoPRD.DataLayer.Context.SCDInnoPRDDataLayerDbContext..ctor(字符串connectionString)
在lambda_method(Closure,Object [])
在Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate()
+ InnerException {“'System.Data.Entity.Internal.AppConfig'的类型初始值设定项引发了异常。“}
System.Exception {System.TypeInitializationException}
下面是autofac注册以及解析DLScdHopDataNarRepository的代码。
注册代码:
public class SCDInnoPRDModule :Module
{
public string ConnectionString { get; private set; }
public SCDInnoPRDModule(string connectionString)
{
ConnectionString = connectionString;
}
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<SCDInnoPRDDataLayerDbContext>()
.As<ISCDInnoPRDDataLayerDbContext>()
.Keyed<ISCDInnoPRDDataLayerDbContext>("scdb")
.WithParameter((pi, ctx) => pi.ParameterType == typeof(string)
&& pi.Name == "connectionString",
(pi, ctx) => getConnectionString(ConnectionString))
.InstancePerLifetimeScope();
builder.RegisterType<DLScdHopDataNarRepository>()
.As<IDLScdHopDataNarRepository>()
.Keyed<IDLScdHopDataNarRepository>("sdhopres")
.InstancePerLifetimeScope();
builder.RegisterType<DLScdNarsService>()
.As<IDLScdNarsService>()
.Keyed<IDLScdNarsService>("sddlser")
.InstancePerLifetimeScope();
}
private Func< string,string> getConnectionString = delegate (string connectionString)
{
string retVal = connectionString;
return retVal;
};
解析代码:
使用(var config = new ContainerConfig()) { //注册依赖项注入 var container = config.Configure(); 使用(var scope = container.BeginLifetimeScope()) 尝试 {//这里发生异常 var dlscd = container.ResolveNamed(“ sdhopres”);
我必须解决这个问题。任何解决问题的建议将不胜感激。 使用autofac在Windows控制台应用程序中执行dbcontext的任何示例源代码项目都将有所帮助。我找不到任何此类项目。 如果有人想查看代码,我可以将整个源代码项目发布在GitHub或网站上以供下载