C# 为什么依赖注入注入最后注册的对象?
我需要你们的帮助。目前我正在控制台应用程序中进行依赖项注入。在单个类中,我定义了三个层来理解依赖注入。 事实上,我正在尝试注入数据访问层的对象,根据需求可以是Oracle或Sql。但是注入是根据最后注册的层进行的。有人能告诉我如何进行正确的注入吗 用户界面层:C# 为什么依赖注入注入最后注册的对象?,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我需要你们的帮助。目前我正在控制台应用程序中进行依赖项注入。在单个类中,我定义了三个层来理解依赖注入。 事实上,我正在尝试注入数据访问层的对象,根据需求可以是Oracle或Sql。但是注入是根据最后注册的层进行的。有人能告诉我如何进行正确的注入吗 用户界面层: class Program { static void Main(string[] args) { IUnityContainer objconatiner = new UnityContainer();
class Program
{
static void Main(string[] args)
{
IUnityContainer objconatiner = new UnityContainer();
objconatiner.RegisterType<Customer>();
objconatiner.RegisterType<IDal, SqlserverDal>();
objconatiner.RegisterType<IDal, OracleServerDal>();
Customer ocust = objconatiner.Resolve<Customer>();
ocust.CustName = "Taylor Swift";
ocust.Add();
}
}
DAL层:
public interface IDal
{
void Add();
}
public class SqlserverDal : IDal
{
public void Add()
{
Console.Write("Now using Sql server");
}
}
public class OracleServerDal : IDal
{
public void Add()
{
Console.Write("Now using Orcale server");
}
}
这正是命名注册发挥作用的地方
static void Main(string[] args)
{
IUnityContainer objconatiner = new UnityContainer();
objconatiner.RegisterType<Customer>();
objconatiner.RegisterType<IDal, SqlserverDal>("SqlServer");
objconatiner.RegisterType<IDal, OracleServerDal>("Oracle");
Customer ocust = objconatiner.Resolve<Customer>();
ocust.CustName = "Taylor Swift";
ocust.Add();
}
public class Customer
{
private IDal oidal;
public string CustName { get; set; }
public Customer([Dependency("SqlServer")]IDal idal)
{
oidal = idal;
}
public void Add()
{
oidal.Add();
}
}
static void Main(字符串[]args)
{
IUnityContainer objconator=新的UnityContainer();
objconator.RegisterType();
RegisterType(“SqlServer”);
RegisterType(“Oracle”);
Customer ocust=objconator.Resolve();
ocust.CustName=“Taylor Swift”;
ocust.Add();
}
公共类客户
{
私营企业;
公共字符串CustName{get;set;}
公共客户([依赖关系(“SqlServer”)]IDal)
{
oidal=ideal;
}
公共无效添加()
{
3.Add();
}
}
现在两种注册都可以使用,但在解析时必须通过名称指定要进行的注册,这可以通过我上面所示的属性来完成,也可以通过接受字符串的
Resolve
调用来完成。您希望容器如何知道要解析的注册?你不应该检查一些配置,只注册其中一个dal实现吗?但是如果我想调用一些新的dal层呢?这就是我要问的问题,我应该如何基于配置注入依赖关系。我需要将所有对象注册到我的unity容器中,所以我需要注册所有dal层。但是我应该如何传递配置部分?@aksh1989不清楚在同一个应用程序执行过程中是否同时需要SQL和Oracle,并根据条件注入或在应用程序的生命周期内使用任何一个?非常感谢。明白了!!
static void Main(string[] args)
{
IUnityContainer objconatiner = new UnityContainer();
objconatiner.RegisterType<Customer>();
objconatiner.RegisterType<IDal, SqlserverDal>("SqlServer");
objconatiner.RegisterType<IDal, OracleServerDal>("Oracle");
Customer ocust = objconatiner.Resolve<Customer>();
ocust.CustName = "Taylor Swift";
ocust.Add();
}
public class Customer
{
private IDal oidal;
public string CustName { get; set; }
public Customer([Dependency("SqlServer")]IDal idal)
{
oidal = idal;
}
public void Add()
{
oidal.Add();
}
}