c# - 遵循教程后的 AutoFac.Core.DependencyResolutionException
问题描述
Autofac 新手,遵循 Youtube 上的教程(收视率很高),但它抛出异常,不知道为什么。
例外:
DependencyResolutionException:在激活特定注册期间发生错误。有关详细信息,请参阅内部异常。注册:Activator = IDomainRepository (ReflectionActivator), Services = [Solution.Entities.IDomainRepository], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = None, Ownership = OwnedByLifetimeScope
和
NoConstructorsFoundException:没有为“Solution.Entities.IDomainRepository”类型找到可访问的构造函数。
IDomainRepository
public interface IDomainRepository
{
List<Domain> GetAll();
string Insert(Domain obj);
bool Update(Domain obj);
bool Delete(string URL);
}
域存储库
public class DomainRepository : IDomainRepository
{
public List<Domain> GetAll()
{
using (IDbConnection db = new SqlConnection(Helper.ConnectionString))
{
if (db.State == ConnectionState.Closed)
{
db.Open();
}
return db.Query<Domain>("SELECT * FROM Domains", commandType: CommandType.Text).ToList();
}
}
public string Insert(Domain obj)
{
using (IDbConnection db = new SqlConnection(Helper.ConnectionString))
{
if (db.State == ConnectionState.Closed)
{
db.Open();
}
db.Query<Domain>("INSERT INTO Domains (Domain) VALUES ("+obj.URL+")", commandType: CommandType.Text);
return obj.URL;
}
}
public bool Update(Domain obj)
{
using (IDbConnection db = new SqlConnection(Helper.ConnectionString))
{
if (db.State == ConnectionState.Closed)
{
db.Open();
}
int result = db.Execute("UPDATE Domains SET Domain="+obj.URL+" WHERE Domain="+obj.URL+")", commandType: CommandType.Text);
return result != 0;
}
}
public bool Delete(string URL)
{
using (IDbConnection db = new SqlConnection(Helper.ConnectionString))
{
if (db.State == ConnectionState.Closed)
{
db.Open();
}
int result = db.Execute("delete from Domains where Domain = @Url", new { Url = URL }, commandType: CommandType.Text);
return result != 0;
}
}
}
域处理程序
static Autofac.IContainer _container;
static DomainHandler()
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<IDomainRepository>().As<IDomainRepository>();
_container = builder.Build();
}
public static bool Delete(string Url)
{
return _container.Resolve<IDomainRepository>().Delete(Url);
}
public static List<Domain> GetAll()
{
return _container.Resolve<IDomainRepository>().GetAll();
}
public static Domain Save(Domain obj, EntityState state)
{
if (state == EntityState.Added)
obj.URL = _container.Resolve<IDomainRepository>().Insert(obj);
else
_container.Resolve<IDomainRepository>().Update(obj);
return obj;
}
任何人都知道可能导致此错误的原因是什么?阅读有关忘记在界面上设置公共访问权限的信息,但这不是这里的问题..:/
解决方案
任何人都知道可能导致此错误的原因是什么?
builder.RegisterType<IDomainRepository>().As<IDomainRepository>();
^^
应该
builder.RegisterType<DomainRepository>().As<IDomainRepository>();
^
因为您需要RegisterType
具体类型,而不是接口。
摘抄:
您注册的任何组件类型都
RegisterType
必须是具体类型。
推荐阅读
- reactjs - 反应进口/出口
- javascript - 在 iOS 设备上输出 JavaScript 事件内容
- git - Git:切换分支
- zabbix - Zabbix:文本文件的最后一行
- javascript - 如何在用户单击单选按钮之前更新 useState 变量?
- pandas - 数据框单元格中的求和列表
- java - 方法返回值在 Eclipse 调试器中不可见
- regex - 正则表达式选择所有在这个或那个之前
- javascript - 在 React 和 material-ui 中制作 popper 或 div 高度“100%”
- python-2.7 - 带有 lxml 构建器的 SSS 版本