OWIN 미들웨어 (global.asax 대신 startup.cs 사용)를 사용하여 ASP.NET MVC 5 웹 응용 프로그램 내에서 Autofac 종속성 삽입을 연결하고 컨트롤러 내에 공용 변수를 설정하십시오.속성 주입 값이 생성자에서 null입니다.
Autofac에서 자동으로 LoginController의 Test 속성을 설정하려면 속성 삽입을 사용하고 있습니다.
public interface ITest
{
string TestMethod();
}
public class Test : ITest
{
public string TestMethod()
{
return "Hello world!";
}
}
public class LoginController : Controller
{
public ITest Test { get; set; }
public LoginController()
{
var aaa = Test.TestMethod();
// Do other stuff...
}
}
다음은 내 startup.cs의 모습입니다. 주변에서 놀았으므로이 코드 중 일부가 필요하지 않을 수도 있습니다.
public class Startup
{
public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
builder.RegisterType<Test>().As<ITest>().SingleInstance();
builder.Register(c => new Test()).As<ITest>().InstancePerDependency();
builder.RegisterType<ITest>().PropertiesAutowired();
builder.RegisterType<LoginController>().PropertiesAutowired();
builder.RegisterModelBinderProvider();
builder.RegisterFilterProvider();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
app.UseAutofacMiddleware(container);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
// Some other stuff...
}
}
따라서 '테스트'공용 속성은 항상 null이므로 런타임에 중단됩니다.
어떤 아이디어가 내 문제 일 수 있습니까? 도와 주셔서 감사합니다. :)
[Autotac에서 속성 주입을 사용하는 방법] 가능한 복제본 (0120)을 참조하십시오. – Steve
등록을 잘못했다. 컨트롤러에는 의존성이 아닌'PropertiesAutowired'가 적용되어야합니다. – Steve
Test 객체를 생성자에 전달하거나 생성자 내에서이 객체를 사용하지 않아도됩니다. 생성자가 실행되기 전에 속성을 할당 할 수 없습니다. – trailmax