【发布时间】:2017-09-06 20:00:32
【问题描述】:
我有一个控制台应用程序,Autofac DI 用于从 Web 应用程序项目中注入数据和服务层。
这是控制台应用程序的设置:
public static class ContainerConfig
{
public static IContainer Configure()
{
var builder = new ContainerBuilder();
builder.RegisterType<DbFactory>().As<IDbFactory>();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>();
builder.RegisterType<Application>().As<IApplication>();
builder.RegisterType<DataRepository>().As<IDataRepository>();
builder.RegisterType<DataService>().As<IDataService>();
return builder.Build();
}
}
public interface IApplication
{
void Run();
}
public class Application : IApplication
{
private readonly IDataService _dataService;
public Application(IDataService dataService)
{
_dataService = dataService;
}
public void Run()
{
var data = _dataService.GetDataById(1);
var task = new TestTask("test");
data.AddTask(task);
_dataService.Update(data);
_dataService.SaveChanges();
}
}
主程序类:
class Program
{
static void Main(string[] args)
{
var container = ContainerConfig.Configure();
using (var scope = container.BeginLifetimeScope())
{
var app = scope.Resolve<IApplication>();
app.Run();
}
}
}
当应用程序运行加载数据工作正常。但是,保存新条目似乎不起作用。
但是,当我删除 DI 并在 Run 方法中使用简单的类初始化时,保存工作正常:
IDbFactory dbFactory = new DbFactory();
IDataRepository dataRepository = new DataRepository(dbFactory);
var unitOfWork = new UnitOfWork(dbFactory);
IDataService service = new DataService(dataRepository, unitOfWork);
var data = service.GetDataById(1);
var task = new TestTask("test");
data.AddTask(task);
service.Update(data);
service.SaveChanges();
我在设置 autofac 时是否遗漏了什么?它似乎可以很好地访问数据,但是在保存时它不会保存数据。我调试看到任何问题,但程序运行良好,没有错误。如何调试此类问题以找到更多详细信息?
更新
public interface IDataService
{
void Add(TestTask task);
void SaveChanges();
}
public class DataService : IDataService
{
private readonly IDataRepository _dataRepository;
private readonly IUnitOfWork _unitOfWork;
public DataService(IDataRepository dataRepository, IUnitOfWork unitOfWork)
{
_dataRepository = dataRepository;
_unitOfWork = unitOfWork;
}
public void Add(TestTask task)
{
_dataRepository.Add(task);
}
public void SaveChanges()
{
_unitOfWork.Commit();
}
}
public class UnitOfWork : IUnitOfWork
{
private readonly IDbFactory _dbFactory;
private ApplicationDbContext _dbContext;
public UnitOfWork(IDbFactory dbFactory)
{
this._dbFactory = dbFactory;
}
public ApplicationDbContext DbContext => _dbContext ?? (_dbContext = _dbFactory.Init());
public void Commit()
{
DbContext.Commit();
}
}
【问题讨论】:
-
这里没有足够的信息来回答您的问题。我们不知道你们的班级都是做什么的。
-
DI例子中的“保存”代码在哪里?
-
问题出现在“DataService”而不是“AutoFac”
-
我仍然想指出,如果我初始化类,保存过程可以正常工作。当我使用依赖注入注入类时,保存过程不起作用。
-
@DavidG 我添加了基础设施类。您想查看任何其他信息或课程内容吗?
标签: c# console-application autofac