C# 类型'***';不可分配给服务'***';在Autofac中
我现在使用System.Linq.dynamic在我的项目中进行动态查询。我使用Autofac作为默认的IOC容器。但现在我在注册通用组件时遇到了一个问题,下面是我的代码: 界面:C# 类型'***';不可分配给服务'***';在Autofac中,c#,autofac,C#,Autofac,我现在使用System.Linq.dynamic在我的项目中进行动态查询。我使用Autofac作为默认的IOC容器。但现在我在注册通用组件时遇到了一个问题,下面是我的代码: 界面: public interface IDynamicQuery { IQueryable<T> CreateDynamicQuery<T>(string propertyName, string propertyValue, Expression<Func<T, bool&g
public interface IDynamicQuery
{
IQueryable<T> CreateDynamicQuery<T>(string propertyName, string propertyValue, Expression<Func<T, bool>> where) where T:class;
}
异常在以下位置引发:var container=builder.Build()代码>
我知道如何在autofac中注册泛型类,但我不知道如何在我提出的类之上注册,有人能帮我吗?我是autofac的新成员,建议中的thx。@CharlieShi我也有同样的问题,我注意到我忘了将继承添加到我的类中。但在您的情况下,请尝试以下方法:
builder.RegisterType();
用类反转接口 您可以通过以下方式使用autofac容器注册完整组件:
builder.RegisterAssemblyTypes(
typeof(YourClass).Assembly)
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
在您的情况下,如果只想注册特定类型,则只需使用以下命令:
builder.RegisterType<DynamicQuery>()
.As<IDynamicQuery>()
.InstancePerLifetimeScope();
builder.RegisterType()
.As()
.InstancePerLifetimeScope();
您可以根据业务需求设置生存期。您的问题是,您试图在实现上映射接口,只需交换IDynamicQuery和DynamicQuery即可。别忘了重建
应该是这样的:
builder.RegisterType<DynamicQuery>().As<IDynamicQuery>().InstancePerHttpRequest();
builder.RegisterType();
在我的例子中,我颠倒了接口和类的提及顺序:
builder.RegisterType<CONCRETE_CLASS>().As<INTERFACE>();
builder.RegisterType().As();
遇到了相同的问题,但在我的案例中原因不同。我没有发现我注册了两次相同的类型。我发现此错误消息具有误导性。如果忘记将接口添加到类中,则可以执行此操作
builder.RegisterType<People>().As<IPeople>();
这将解决它
public class People : IPeople
你走错方向了。IDynamicQuery
不是DynamicQuery
,而是DynamicQuery
是IDynamicQuery
。@Aron天哪,我真粗心。。。。。我昨晚睡得不好。谢谢你的建议。我也忘了给我的类添加接口。今天是星期五,所以这是我的借口。@RichS哈哈哈,这是碰巧的家伙!你的这部分评论真的帮助了我!!-->我忘了加遗产这是我的问题谢谢!这是我的问题。你怎么会错过这样的小事,真有趣。
builder.RegisterType<CONCRETE_CLASS>().As<INTERFACE>();
builder.RegisterType<People>().As<IPeople>();
public class People
public class People : IPeople