C#-MVC中的Unity3-寄存器特定实现
作者:互联网
我将MVC 4与Unity3一起用于依赖项注入.
假设我有两种服务实现,例如:
public interface ILogger
{
void Log(string log);
}
public class DefaultLogger : ILogger
{
public void Log(string log)
{
System.Diagnostics.Debug.WriteLine(log, "DefaultLogger");
}
}
public class SoundLogger : ILogger
{
public void Log(string log)
{
System.Media.SystemSounds.Beep.Play();
System.Diagnostics.Debug.WriteLine(log, "SoundLogger");
}
}
是否可以向不同的Controller注入不同的实现?我想将DefaultLogger注入Controller1,将SoundLogger注入Controller2.如果可能,我需要在Bootstrapper.cs中做什么以正确注册它?
感谢您的任何反馈!
解决方法:
您可以尝试按名称注册实现;
UnityContainer container = new UnityContainer();
container.RegisterType<ILogger, DefaultLogger>("Default");
container.RegisterType<ILogger, SoundLogger>("Sound");
那么您可以在构造函数中使用它们,如下所示:
public Controller1([Dependency("Default")] ILogger logger)
{
...
}
public Controller2([Dependency("Sound")] ILogger logger)
{
...
}
或者您可以使用注入参数:
Microsoft Unity. How to specify a certain parameter in constructor?
标签:dependency-injection,unity-container,c,asp-net-mvc 来源: https://codeday.me/bug/20191122/2059131.html