【发布时间】:2015-01-01 01:47:02
【问题描述】:
我正在尝试在 WCF 中实现 Autofac,但它不起作用。
步骤:1
protected void Application_Start(object sender, EventArgs e)
{
var builder = new ContainerBuilder();
// Register your service implementations.
builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>();
builder.RegisterType<ProjectRepository>().As<IProjectRepository>();
builder.RegisterType<ProjectService>().As<IProjectService>();
builder.RegisterType<DataService>().As<IDataService>();
builder.Register(c => new ProjectRepository(c.Resolve<DatabaseFactory>())).AsSelf();
builder.Register(c => new ProjectService(c.Resolve<ProjectRepository>(),c.Resolve<UnitOfWork>())).AsSelf();
builder.Register(c => new DataService(c.Resolve<ProjectService>())).AsSelf();
//builder.RegisterType<DataService>().As<IDataService>();
// Set the dependency resolver.
var container = builder.Build();
AutofacHostFactory.Container = container;
}
步骤:2
public class DataService : IDataService
{
private IProjectService projectService;
public DataService(IProjectService projectService)
{
this.projectService = projectService;
}
public List<Data.Project> GetProjects()
{
return projectService.GetAllProject();
}
}
在 WCF 启动时显示错误
提供的服务类型无法作为服务加载,因为它 没有默认(无参数)构造函数。修复 问题,给类型添加一个默认构造函数,或者传递一个实例 主机的类型。
块引用
我错过了什么?
如果我用 0 参数实现构造函数,那么 "projectService.GetAllProject(); " projectService 对象在
中显示为空public List<Data.Project> GetProjects()
{
return projectService.GetAllProject();
}
谢谢, 帕尔甘
【问题讨论】:
-
WCF 服务是 ProjectService 还是 DataService?你能显示你的 .svc 文件或服务的 web.config 注册吗?您是否浏览过 Autofac WCF 文档并确认您遵循了所有步骤? autofac.readthedocs.org/en/latest/integration/wcf.html
标签: wcf inversion-of-control autofac