2017-06-15 73 views
1

NotificationHubConnectionSettings.cs文件使用Unity依赖注入的NuGet设置依赖注入实施应用C#

private static IUnityContainer BuildUnityContainer() 
     { 
      try 
      { 
       var container = new UnityContainer(); 

       container.RegisterType<NotificationHubConnectionSettings>().RegisterType<NotificationHubConnectionSettings>(new HierarchicalLifetimeManager()); 

       return container; 

      } 
      catch (Exception) 
      { 
       return null; 
      } 

     } 

HomeController.cs

要来从web.config中

public class NotificationHubConnectionSettings 
    { 
     public NotificationHubClient Hub { get; set; } 
     public NotificationHubConnectionSettings() 
     { 
      Hub = NotificationHubClient.CreateClientFromConnectionString(ConfigurationManager.AppSettings["Microsoft.Azure.NotificationHubs.ConnectionString"], ConfigurationManager.AppSettings["NotificationHub"]); 
     } 
    } 

Bootstrapper.cs 连接字符串实施依赖注入 -

private readonly NotificationHubClient _hub; 

     public HomeController(NotificationHubConnectionSettings hub) 
     { 
      _hub = hub.Hub; 
     } 

     // POST api/register 
     // This creates a registration id 
     public async Task<string> Post(string handle = null) 
     { 
      string newRegistrationId = null; 

      if (handle != null) 
      { 
       var registrations = await _hub.GetRegistrationsByChannelAsync(handle, 100); 

这是实现依赖注入的正确方法吗?

+0

这是一个代码审查问题。这是本网站的主题。有没有遇到一些错误/问题? – Nkosi

+0

它看起来并不适合我,但是我不太了解Unity作为一个容器。您应该将接口绑定到容器代码中的具体类型。注册类型()。RegisterType (new HierarchicalLifetimeManager()) 然后,您应该将该接口作为构造函数参数类型。 –

回答

0

您应该在这里使用接口类型。

以接口的形式为INotificationHubConnectionSettings类创建合约,该接口向您的系统指示所有可用的公共方法和属性。

public interface INotificationHubConnectionSettings 
    { 
     NotificationHubClient Hub { get; set; } 
    } 

然后让您的实际NotificationHubConnectionSettings类从此接口继承;

public class NotificationHubConnectionSettings : INotificationHubConnectionSettings 
    { 
     public NotificationHubClient Hub { get; set; } 
     public NotificationHubConnectionSettings() 
     { 
      Hub = NotificationHubClient.CreateClientFromConnectionString(ConfigurationManager.AppSettings["Microsoft.Azure.NotificationHubs.ConnectionString"], ConfigurationManager.AppSettings["NotificationHub"]); 
     } 
    } 

现在在UnityContainer中注册接口和类并将您的构造函数更改为以下内容;

private readonly INotificationHubClient _hub; 
    public HomeController(NotificationHubConnectionSettings hub) 
    { 
     _hub = hub.Hub; 
    } 

总是使用接口进行依赖注入。

+0

我们没有接口'INotificationHubClient' – Nix

+0

我们可以这样做 'private readonly NotificationHubClient _hub; public BuildingAlertController(INotificationHubConnectionSettings集线器) _hub = hub.Hub; }' – Nix