【发布时间】:2017-09-28 15:08:43
【问题描述】:
如果我在问这个问题时犯了任何错误,请原谅我,因为这是我在这个网站上提出的第一个问题。
我目前正在尝试将 Autofac 添加到已经存在的项目中。我已经使用 Autofac 大约 6 个小时和 C# 大约 4 周,我最初是一名 Python 开发人员,所以请原谅任何 C# 无知。我目前有以下测试方法:`
public static void BasicTest()
{
using (var scope= Program.container.BeginLifetimeScope())
{
ITradeManager tm = scope.Resolve<ITradeManager>();
List<IGameData> gamesList = new List<IGameData>();
List<IUserData> usersList = new List<IUserData>();
IScraperManager sc = scope.Resolve<IScraperManager>(new NamedParameter("sc",(scope.Resolve<UniScraper>(new NamedParameter("games", gamesList), new NamedParameter("users", usersList)))));
IDatabaseIC db = scope.Resolve<IDatabaseIC>();
IAppCore app = scope.Resolve<IAppCore>(
new NamedParameter("tm", tm),
new NamedParameter("sc", sc),
new NamedParameter("db", db));
IUserData tradeUser = scope.Resolve<IUserData>();
app.Initialise(tradeUser, uniUser);
app.Run();
}
并具有以下容器设置:
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<AppCore>().As<IAppCore>();
builder.RegisterType<DatabaseInteractionControler>().As<IDatabaseIC>();
builder.RegisterType<ScraperManager>().As<IScraperManager>();
builder.RegisterType<TradeManager>().As<ITradeManager>();
builder.RegisterType<GameData>().As<IGameData>();
builder.RegisterType<UserData>().As<IUserData>();
builder.RegisterType<Scrapers.Scrapers.Uni.UniScraper>().AsSelf().As<IBaseScraper>();
builder.RegisterType<Scrapers.Scrapers.Hill.HillScraper>().AsSelf().As<IBaseScraper>();
builder.RegisterType<Scrapers.Marathon.MarathonScraper>().AsSelf().As<IBaseScraper>();
container = builder.Build();
Tests.AppTest.BasicTest();
}
我的问题是,当我尝试将已经解析的对象作为参数传递给 Autofac 以解析 IAppcore 时,它会忽略我作为参数传递的已经解析的对象,而不是像我没有传递任何参数一样尝试解析对它!
我是否错过了一些理解,或者是否有一个明显的解决方案我对 C# 和 Autofac 太陌生而无法轻易看到?
如果您有兴趣,我最初编写的项目(现在转换为使用 Autofac)是一组简单的网络爬虫,可以从各种不同的网站提取体育新闻,并将它们收集到一个方便的小型桌面应用程序中。
【问题讨论】: