Я новичок в внедрении зависимостей на основе Autofac. В соответствии с требованиями нашей компании, я должен использовать его в новом веб-API, который я создаю. Ниже мой код. Я использую класс IocConfig для Autofac для создания и добавления объектов в мой веб-API.
public class MemberCodeController : ApiController
{
private IMemberStrategy memberStrategy;
private IMemberDetail memberDetail;
//Constructor dependency injection through Autofac
public MemberCodeController(IMemberStrategy memberStrategy,
IMemberDetail memberDetail)
{
this.memberStrategy = memberStrategy;
}
public IHttpActionResult CreateMember(string email)
{
memberDetail.DataFields.RegisterCode = GetCode();
memberDetail.Email = email;
}
}
The MemberDetail class:
public interface IMemberDetail
{
String Email { get; set; }
DataFields DataFields { get; set; }
}
public class MemberDetail : IMemberDetail
{
public String Email { get; set; }
public DataFields DataFields { get; set; }
}
public interface IDataFields
{
String RegisterCode { get; set; }
}
public class DataFields : IDataFields
{
public String RegisterCode { get; set; }
}
IocConfig:
public class IocConfig
{
//Autofac configuration
public static void Configure()
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<MemberStrategy>().As<IMemberStrategy>();
builder.RegisterType<DataFields>().As<IDataFields>();
builder.RegisterType<MemberDetail>().As<IMemberDetail>();
IContainer container = builder.Build();
AutofacWebApiDependencyResolver resolver = new
AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
}
}
Проблема в том, что когда я пытаюсь использовать эту строку,
memberDetail.DataFields.RegisterCode = GetCode ();
Данные поля являются нулевыми. Очевидно, что Autofac не создает его, пока создает объект MemberDetail.