如何在Azure Function v2中实现Unity Container DI

时间:2019-08-02 06:00:07

标签: c# azure asp.net-core .net-core azure-functions

在WebAPI的早期版本中,我曾经实现如下所示的Unity容器依赖注入

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        //I want to implement below in Azure Function V2
        var container = new UnityContainer();
        container.RegisterType<IDeviceRepository, DeviceRepository>(new HierarchicalLifetimeManager());
        container.RegisterType<IFilterRepository, FilterRepository>(new HierarchicalLifetimeManager());
        container.RegisterType<INEORepository, NEORepository>(new HierarchicalLifetimeManager());

        config.DependencyResolver = new UnityResolver(container); 
    }
}

如何在Azure Function V2中实现以上代码。

我浏览了几篇在线文章,但没有找到适当的解决方案。

请提出建议。

1 个答案:

答案 0 :(得分:0)

我已经使用以下代码在Azure函数中实现DI。

  public class GenericDependencyInjection
    {
        private static readonly UnityContainer UnityContainer = new UnityContainer();

        public GenericDependencyInjection()
        {
            try
            {
                UnityContainer.RegisterType<IOperations,Operations>(new ContainerControlledLifetimeManager());
            }
            catch (Exception ex)
            {
                throw ;
            }
        }

          public T Retrieve<T>()
        {
            return UnityContainer.Resolve<T>();
        }

        }

我通过在其他类中传递以下通用类型来调用Retrieve方法

var data = new GenericDependencyInjection().Retrieve<EmpDetails>();
            return await data.UpdateDetails(EmpId, Name); //calling class EmpDetails method