【发布时间】:2021-08-30 18:19:32
【问题描述】:
尝试使用依赖注入设置 .net 5 控制台应用程序并使用类库中的方法。不知道我已经解决了什么问题,但我得到了一个例外
'适合类型'TesterUtil.DataHelper.IBookMgr'的构造函数 无法定位。确保类型是具体的并且服务是 为公共构造函数的所有参数注册。'
主类
class Program
{
static void Main(string[] args)
{
var host = AppStartup();
var service = ActivatorUtilities.CreateInstance<IBookMgr>(host.Services);
// test
var results = service.GetDoTest();
Console.WriteLine(results);
}
static IHost AppStartup()
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var configuration = new ConfigurationBuilder()
.SetBasePath(Path.GetDirectoryName(pathToExe))
.AddJsonFile("appsettings.json")
.Build();
LogManager.Configuration = new NLogLoggingConfiguration(configuration.GetSection("NLog"));
var logger = NLog.Web.NLogBuilder.ConfigureNLog(LogManager.Configuration).GetCurrentClassLogger();
logger.Info("Tester Startup");
var host = Host.CreateDefaultBuilder() // Initialising the Host
.ConfigureServices((context, services) =>
{ // Adding the DI container for configuration
services.AddTransient<IBookMgr, BookMgr>();
})
.Build(); // Build the Host
return host;
}
图书管理员
public interface IBookMgr
{
public bool GetDoTest();
public bool SaveComplex();
}
public class BookMgr : IBookMgr
{
private readonly DbContextOptionsBuilder<AdhocContext> _bldr1;
private AdhocContext ctx;
public BookMgr(IConfiguration config)
{
// note extended commandtimeout settings, due to lengthy archive operations against Db
_bldr1 = new DbContextOptionsBuilder<AdhocContext>();
_bldr1.UseSqlServer(config.GetConnectionString("AdhocDbConStr"), sqlOptions => sqlOptions.CommandTimeout((int)TimeSpan.FromMinutes(20).TotalSeconds));
ctx = new AdhocContext(_bldr1.Options);
}
public bool GetDoTest()
{
// test getting data
bool retval = false;
var TestList = (from a in ctx.Book select a).ToList();
if(TestList.Count > 0)
{
retval = true;
}
else
{
retval = false;
}
return retval;
}
public bool SaveComplex()
{
bool retval = false;
return retval;
}
}
【问题讨论】: