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在此上下文类中注册仍然会遇到相同的错误:(我找到了实现这一点的原因和方法,一旦我写了一篇文章,将在这里与大家分享,谢谢大家的支持