私はこれを私のアプリケーションの1つで設定しました。そこにそれを行うためのさまざまな方法がありますが、私はこのアプローチを好む:
Autofac and ASP.NET Web API System.Web.Http.Services.IDependencyResolver Integration
まず私はSystem.Web.Http.Services.IDependencyResolver
インタフェースを実装するクラスを作成しました。
internal class AutofacWebAPIDependencyResolver : System.Web.Http.Services.IDependencyResolver {
private readonly IContainer _container;
public AutofacWebAPIDependencyResolver(IContainer container) {
_container = container;
}
public object GetService(Type serviceType) {
return _container.IsRegistered(serviceType) ? _container.Resolve(serviceType) : null;
}
public IEnumerable<object> GetServices(Type serviceType) {
Type enumerableServiceType = typeof(IEnumerable<>).MakeGenericType(serviceType);
object instance = _container.Resolve(enumerableServiceType);
return ((IEnumerable)instance).Cast<object>();
}
}
そして私は私の登録を保持している別のクラスがあります。Application_Start
でそれを初期化し、その後
internal class AutofacWebAPI {
public static void Initialize() {
var builder = new ContainerBuilder();
GlobalConfiguration.Configuration.ServiceResolver.SetResolver(
new AutofacWebAPIDependencyResolver(RegisterServices(builder))
);
}
private static IContainer RegisterServices(ContainerBuilder builder) {
builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly).PropertiesAutowired();
builder.RegisterType<WordRepository>().As<IWordRepository>();
builder.RegisterType<MeaningRepository>().As<IMeaningRepository>();
return
builder.Build();
}
}
を:
protected void Application_Start() {
//...
AutofacWebAPI.Initialize();
//...
}
私はこのことができます願っています。
残念ながら、このコメントの入力時には、同時にAutofac for MVC 4 RCとWeb API RCを使用しても動作しないように見えます。 Web APIフレームワークアセンブリでタイプが見つからないというコンパイラーの警告が表示されます。 @tugberkによって提供された答えを使用して、それを回避するために依存関係リゾルバを再実装する必要がありました。 – NathanAldenSr