编程语言
首页 > 编程语言> > C#-MVC中的Unity3-寄存器特定实现

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