Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用autofac在控制台应用程序中进行依赖项注入时出错_C#_Console Application_Autofac_Jobs - Fatal编程技术网

C# 使用autofac在控制台应用程序中进行依赖项注入时出错

C# 使用autofac在控制台应用程序中进行依赖项注入时出错,c#,console-application,autofac,jobs,C#,Console Application,Autofac,Jobs,这个问题其实是以前问过的 只想从控制台应用程序中的主静态方法调用非静态方法 所以我遵循上面的文章,以这种方式构建 namespace SampleConsoleApp { [ExcludeFromCodeCoverage] public class Program { private ISampleService _oSampleService; private static IContainer Compositio

这个问题其实是以前问过的

  • 只想从控制台应用程序中的主静态方法调用非静态方法

    所以我遵循上面的文章,以这种方式构建

    namespace SampleConsoleApp
    {
        [ExcludeFromCodeCoverage]
        public class Program
        {
            private ISampleService _oSampleService;
            
            private static IContainer CompositionRoot()
            {
                var builder = new ContainerBuilder();
                builder.RegisterType<SampleInitialize>();
                builder.RegisterType<SampleService>().As<ISampleService>();
                return builder.Build();
            }
            public static void Main(string[] args)
            {
                CompositionRoot().Resolve<SampleInitialize>().Run_Auto();
            }
        }
    }
    
    namespace SampleConsoleApp
    {
        public class SampleInitialize
        {
      
            private ISampleService _oSampleService;
    
            public SampleInitialize(ISampleService oSampleService)
            {
                _oSampleService = oSampleService;
            }
    
            public void Run_Auto()
            {
               var _list = _oSampleService.GetList();
            }
        }
    }
    
    namespace SampleConsoleApp
    {
        public class SampleService : ISampleService
        {
            public SampleService(IContext context)
                : base(context)
            {
                _context = context;
    
            }
            
            public List<String> GetList()
            {
                var _list = new List<String>();
                
                ....
             
                return _list;
            }
        }
        
    }
    
    namespace SampleConsoleApp
    {
        public interface ISampleService
        {
            List<String> GetList();
        }   
    }
    
    名称空间SampleConsoleApp
    {
    [不包括CODECODECOVERAGE]
    公共课程
    {
    私有ISampleService\u oSampleService;
    专用静态IContainer CompositionRoot()
    {
    var builder=new ContainerBuilder();
    RegisterType();
    builder.RegisterType().As();
    返回builder.Build();
    }
    公共静态void Main(字符串[]args)
    {
    CompositionRoot().Resolve().Run_Auto();
    }
    }
    }
    名称空间SampleConsoleApp
    {
    公共类样本初始化
    {
    私有ISampleService\u oSampleService;
    公共样本初始化(ISampleService-oSampleService)
    {
    _oSampleService=oSampleService;
    }
    公共无效运行_Auto()
    {
    var_list=_oSampleService.GetList();
    }
    }
    }
    名称空间SampleConsoleApp
    {
    公共类SampleService:ISampleService
    {
    公共示例服务(IContext上下文)
    :基本(上下文)
    {
    _上下文=上下文;
    }
    公共列表GetList()
    {
    var_list=新列表();
    ....
    返回列表;
    }
    }
    }
    名称空间SampleConsoleApp
    {
    公共接口是一个简单的服务
    {
    List GetList();
    }   
    }
    
    但我得到一个错误,一旦这次发射如下

    找不到具有的构造函数 类型上的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder” “SampleConsoleApp.SampleInitialize”可以使用可用的 服务和参数:\r\n无法解析参数 的“SampleConsoleApp.SampleService.ISampleService oSampleService” 构造函数'Void.ctor(SampleConsoleApp.ISampleService')


    如@hocho所述,您需要注册IContext

        private static IContainer CompositionRoot()
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<SampleInitialize>();
            builder.RegisterType<SampleService>().As<ISampleService>();
            builder.RegisterType<SampleDbContext>().As<IContext>();
            return builder.Build();
        }
    
    专用静态IContainer CompositionRoot()
    {
    var builder=new ContainerBuilder();
    RegisterType();
    builder.RegisterType().As();
    builder.RegisterType().As();
    返回builder.Build();
    }
    

    之后,您还需要注册SampleDbContext构造函数所需的所有内容。

    正如@hocho中提到的,您需要注册IContext

        private static IContainer CompositionRoot()
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<SampleInitialize>();
            builder.RegisterType<SampleService>().As<ISampleService>();
            builder.RegisterType<SampleDbContext>().As<IContext>();
            return builder.Build();
        }
    
    专用静态IContainer CompositionRoot()
    {
    var builder=new ContainerBuilder();
    RegisterType();
    builder.RegisterType().As();
    builder.RegisterType().As();
    返回builder.Build();
    }
    

    之后,还需要注册SampleDbContext构造函数所需的所有内容。

    错误似乎指向无法创建SampleService,因为无法解析IContext。实现IContext的类需要注册。@hocho您的意思是,这个类
    公共类SampleDbContext:DbContext,IContext
    ?我可以知道它应该注册在哪里吗?错误似乎指向无法创建SampleService,因为IContext无法解决。实现IContext的类需要注册。@hocho您的意思是,这个类
    公共类SampleDbContext:DbContext,IContext
    ?我能知道它应该注册在哪里吗?在这个上下文类中注册后仍然会遇到相同的错误:(我找到了实现这个的原因和方法,在我撰写一篇文章后将在这里分享,感谢您的supportafter在此上下文类中注册仍然会遇到相同的错误:(我找到了实现这一点的原因和方法,一旦我写了一篇文章,将在这里与大家分享,谢谢大家的支持