簡體   English   中英

如何使用 autofac 解決組件 Asp.net Web Api

[英]How to Resolve the Component Asp.net Web Api using autofac

我正在使用 Autofac 容器在 Asp.net Web Api 中工作。 我嘗試了各種方式來注冊和解決組件,但仍然遇到錯誤。 我評論了一些其他代碼以了解我嘗試過的其他方法。

“Autofac.dll 中發生‘System.ArgumentNullException’類型的異常,但未在用戶代碼中處理附加信息:值不能為 null。發生”

 public class DynamicController : ApiController
{
  public  EntityDetails Entity { get; set; }

    public DataAccessRegisteration datareg { get; set; }
    
   
        
    [HttpGet]
    public string CreateRetreiveEntities()
    {
      AutofacCofig.Container.Resolve<EntityDetails>().CreateRetreiveEntities();
      //  this.Entity.CreateRetreiveEntities();
       // this.datareg.contact.CreateContract();

        String clientdetails =ClientEntity.CreateRetreiveEntities();
      
       return clientdetails;
    }
}

 public class ContractEntityDetails
{
public String  CreateRetreiveEntities()
    {
           ContractEntity contactEntity = new ContractEntity();
              //    contactId= datareg.contract.CreateContract();
      
        return string.Empty;
        
    }
 }



public  class AutofacCofig:Module
    {
        public static IContainer Container { get; set; }
        public static void configure()
        {
            var builder = new ContainerBuilder();
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            builder.RegisterAssemblyModules<ModuleRegistration>();
        


            var container = builder.Build();
            var resolver = new AutofacWebApiDependencyResolver(container);
            GlobalConfiguration.Configuration.DependencyResolver = resolver;
        }
    }
 public class WebApiApplication : System.Web.HttpApplication
 {
     protected void Application_Start()
    {
        //builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
        //  builder.RegisterType<DynamicController>()
        //  .InstancePerRequest();
        //builder.RegisterType<DataAccessRegisteration>();
             AutofacCofig.configure();
          AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
       
         FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
         RouteConfig.RegisterRoutes(RouteTable.Routes);
     }
}

經過一番搜索,我已經確定了解決方案。 請在下面找到代碼。 此解決方案適用於我使用 Autofac(DI) 創建 Asp.Net Webapi

Controller

 public class DynamicController : ApiController
 {
    public readonly IEntityDetails1 _entitydetails;
    public DynamicController (IEntityDetails1 entitydetails)
    {
        _entitydetails = entitydetails;
    }
     [HttpGet]
    public string CreateRetreiveClientEntities()
    {
      String details = this._entitydetails.CreateRetreiveEntities();
              
        return details;
    }
 }

實體詳情

   public class EntityDetails : IEntityDetails1
  {
   public readonly IContractEntity _contractEntity;
   
    public EntityDetails(IContractEntity contractEntity)
    {
        _contractEntity = contractEntity;          
    }
    public String CreateRetreiveEntities()
    {
         contractId=  this._contractEntity.CreateConrtact();                                 
    return contractId;
        
    }

 }

合同.cs

public class ContactEntity : IContactEntity
{
    
    Guid contactId = new Guid();
    public Guid CreateContact()
    {
         contactId = Api.SaveContract();
       return contactId.ToString();
     }
  }

全球.asax

   protected void Application_Start()
    {

        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);           
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        ContainerBuilder builder = new ContainerBuilder();
        builder.RegisterType<EntityDetails>().As<IEntityDetails1>();
        builder.RegisterType<ContractEntity>().As<IContractEntity>();
         builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(t => 
          t.Name.EndsWith("Controller"));
        IContainer container = builder.Build();
        var resolver = new AutofacWebApiDependencyResolver(container);
        GlobalConfiguration.Configuration.DependencyResolver = resolver;
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM