C# 使用Autofac激活特定注册时出错
这是我们使用C# 使用Autofac激活特定注册时出错,c#,oop,dependency-injection,interface,autofac,C#,Oop,Dependency Injection,Interface,Autofac,这是我们使用Autofac builder.Register(c => new FileLogger(ILogger)).As<ILogger>().SingleInstance(); var sizeinkb= Convert.ToInt32(configuration.GetValue<string>("Settings:SizeInKb")); builder.RegisterType<Broker>().As<IBroker>()
Autofac
builder.Register(c => new FileLogger(ILogger)).As<ILogger>().SingleInstance();
var sizeinkb= Convert.ToInt32(configuration.GetValue<string>("Settings:SizeInKb"));
builder.RegisterType<Broker>().As<IBroker>().WithParameter("size", sizeinkb).SingleInstance();
builder.RegisterType<MainClass>().As<IMainClass>().SingleInstance();
var container = builder.Build();
ContainerFactory.SetContainer(container);
这是broker类
public class Broker:IBroker
{
public Broker(ILogger logger,
int size)
{
}
}
Autofac.Core.dependencResolutionException
HResult=0x80131500
消息=在激活特定注册期间发生错误。有关详细信息,请参见内部异常。注册:Activator=MainClass(ReflectionActivator),Services=[MyProject.IMainClass],Lifetime=Autofac.Core.Lifetime.RootScopeLifetime,Shared=Shared,Ownership=OwnedByLifetimeScope-->在类型“MyProject.MainClass”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数都不能使用可用的服务和参数调用:
无法解析构造函数“Void.ctor(MyProject.IBroker,MyProject.ILogger)”的参数“MyProject.IBroker broker”
这里是另一种方法,在lambda设置期间可以解析依赖关系
//...removed for brevity
var sizeinkb = Convert.ToInt32(configuration.GetValue<string>("Settings:SizeInKb"));
builder.Register(c => new Broker(c.Resolve<ILogger>(), sizeinkb))
.As<IBroker>().SingleInstance();
builder.RegisterType<MainClass>().As<IMainClass>().SingleInstance();
var container = builder.Build();
ContainerFactory.SetContainer(container);
//…为简洁起见已删除
var sizeinkb=Convert.ToInt32(configuration.GetValue(“Settings:sizeinkb”);
Register(c=>newbroker(c.Resolve(),sizeinkb))
.As().SingleInstance();
builder.RegisterType().As().SingleInstance();
var container=builder.Build();
ContainerFactory.SetContainer(容器);
这里是另一种方法,可以在lambda设置期间解决依赖关系
//...removed for brevity
var sizeinkb = Convert.ToInt32(configuration.GetValue<string>("Settings:SizeInKb"));
builder.Register(c => new Broker(c.Resolve<ILogger>(), sizeinkb))
.As<IBroker>().SingleInstance();
builder.RegisterType<MainClass>().As<IMainClass>().SingleInstance();
var container = builder.Build();
ContainerFactory.SetContainer(container);
//…为简洁起见已删除
var sizeinkb=Convert.ToInt32(configuration.GetValue(“Settings:sizeinkb”);
Register(c=>newbroker(c.Resolve(),sizeinkb))
.As().SingleInstance();
builder.RegisterType().As().SingleInstance();
var container=builder.Build();
ContainerFactory.SetContainer(容器);