Windows CONSOLE APP中DBCONTEXT构造函数参数的AUTOFAC THROWIN例外

时间:2019-07-19 11:52:05

标签: windows entity-framework autofac

我正在使用反向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或网站上以供下载

0 个答案:

没有答案