C# 在不同类的控制台应用程序中使用AutoFac构造函数注入
所以我的想法是,我在这里遗漏了一些东西,但我基本上是在制作一个控制台应用程序,它将调用多个处理程序 Program.csC# 在不同类的控制台应用程序中使用AutoFac构造函数注入,c#,autofac,constructor-injection,C#,Autofac,Constructor Injection,所以我的想法是,我在这里遗漏了一些东西,但我基本上是在制作一个控制台应用程序,它将调用多个处理程序 Program.cs 如何修复此问题,以便在另一个类中使用构造函数注入,而只需在启动时对其进行初始化?由于从未调用UserHandler构造函数,因此\u backupFactory为空 要解决此问题,还需要为UserHandler创建一个接口,并在AutoFacBootstrapper中注册类型 interface IUserHandler { void PerformSomeActio
如何修复此问题,以便在另一个类中使用构造函数注入,而只需在启动时对其进行初始化?由于从未调用
UserHandler
构造函数,因此\u backupFactory
为空
要解决此问题,还需要为UserHandler
创建一个接口,并在AutoFacBootstrapper
中注册类型
interface IUserHandler
{
void PerformSomeAction();
}
class UserHandler : IUserHandler
{
private IBackupFactory _backupFactory;
public UserHandler(IBackupFactory backupFactory)
{
_backupFactory = backupFactory;
}
public void PerformSomeAction()
{
var users = _backupFactory.GetFtpUsers();
}
}
class AutoFacBootstrapper
{
public static IContainer Init()
{
var builder = new ContainerBuilder();
builder.RegisterType<UserHandler>().As<IUserHandler>();
builder.RegisterType<BackupFactory>().As<IBackupFactory>();
return builder.Build();
}
}
作为旁注,由于应用程序越来越大,并且将创建新项目,因此未指示在AutoFacBootstrap
类中注册所有类型的应用程序
最好在每个项目中有一个单独的类,该类将继承Autofac.Module
,该类将覆盖Load
方法。这样,您就可以访问ContainerBuilder
,并能够注册所有所需的类型(来自该程序集)
有关更多详细信息,请查看Autofac文档中的部分稍后我将查看模块,但将我的处理程序同时注入是一个好主意,谢谢!
public static IContainer Init()
{
var builder = new ContainerBuilder();
builder.RegisterType<BackupFactory>().As<IBackupFactory>();
return builder.Build();
}
private static IBackupFactory _backupFactory;
public UserHandler(IBackupFactory backupFactory)
{
_backupFactory = backupFactory;
}
public static void Init(string[] subCommands)
{
var users = _backupFactory.GetFtpUsers();
}
interface IUserHandler
{
void PerformSomeAction();
}
class UserHandler : IUserHandler
{
private IBackupFactory _backupFactory;
public UserHandler(IBackupFactory backupFactory)
{
_backupFactory = backupFactory;
}
public void PerformSomeAction()
{
var users = _backupFactory.GetFtpUsers();
}
}
class AutoFacBootstrapper
{
public static IContainer Init()
{
var builder = new ContainerBuilder();
builder.RegisterType<UserHandler>().As<IUserHandler>();
builder.RegisterType<BackupFactory>().As<IBackupFactory>();
return builder.Build();
}
}
static void Main(string[] args)
{
IContainer container = AutoFacBootstrapper.Init();
IUserHandler startPoint = container.Resolve<IUserHandler>();
startPoint.PerformSomeAction();
}