[英]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.