C# 如果构造函数使用另一个接口,如何在简单的注入器中进行构造函数注入?
我试图实例化C# 如果构造函数使用另一个接口,如何在简单的注入器中进行构造函数注入?,c#,dependency-injection,simple-injector,C#,Dependency Injection,Simple Injector,我试图实例化HomedataAccess类,该类将字符串和接口IQueryManager作为构造函数参数。如何注册 到目前为止,我已经完成了以下工作,但我不喜欢这种方式: Kernel.Register(() => new HomeDataAccess("anandv4", new SqlServerQueryManager(new SqlServerConnectionManager()))); 还有其他方法吗?你正在做的事情可以很好地完成。这没什么错。尤其是当您的Sql
HomedataAccess
类,该类将字符串和接口IQueryManager
作为构造函数参数。如何注册
到目前为止,我已经完成了以下工作,但我不喜欢这种方式:
Kernel.Register(() => new HomeDataAccess("anandv4",
new SqlServerQueryManager(new SqlServerConnectionManager())));
还有其他方法吗?你正在做的事情可以很好地完成。这没什么错。尤其是当您的
SqlServerQueryManager
和SqlServerConnectionManager
仅在HomeDataAccess
类中使用时
但是,如果在多个位置使用了IQueryManager
抽象,则问题会更大,因为它会导致注册重复,这可能会增加维护
解决方案可能是执行以下操作:
Kernel.Register(() => new HomeDataAccess(
"anandv4",
Kernel.GetInstance<IQueryManager>());
这允许您按如下方式进行注册:
Kernel.RegisterSingleton(new HomeDataAccessConfig("anandv4"));
Kernel.Register<HomeDataAccess>();
Kernel.Register<IQueryManager>(() =>
new SqlServerQueryManager(new SqlServerConnectionManager()));
Kernel.RegisterSingleton(新的HomeDataAccessConfig(“anandv4”);
Register();
内核寄存器(()=>
新的SqlServerQueryManager(新的SqlServerConnectionManager());
感谢您详细介绍。我发现我可以将简单的username属性抽象为单独的IUser接口。这有助于执行以下操作:Kernel.Register();Register();Register();在运行的应用程序的生命周期中,用户名是常量还是每个请求都会更改(如:触发当前请求的用户的名称)
Kernel.RegisterSingleton(new HomeDataAccessConfig("anandv4"));
Kernel.Register<HomeDataAccess>();
Kernel.Register<IQueryManager>(() =>
new SqlServerQueryManager(new SqlServerConnectionManager()));