私はいくつかのリソースDI'dを持つWeb APIコントローラーを持っています。後で私はMVCコントローラを追加しましたが、今では同じリソースDIが必要になります。単純なインジェクターは、MVCとWeb APIコントローラーの両方で初期化されます
[assembly: WebActivator.PostApplicationStartMethod(typeof(CineplexSearch.App_Start.SimpleInjectorWebApiInitializer), "Initialize")]
namespace CineplexSearch.App_Start
{
using System.Web.Http;
using SimpleInjector;
using SimpleInjector.Integration.WebApi;
public static class SimpleInjectorWebApiInitializer
{
/// <summary>Initialize the container and register it as Web API Dependency Resolver.</summary>
public static void Initialize()
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle();
InitializeContainer(container);
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
}
private static void InitializeContainer(Container container)
{
container.Register<ICachingManager, CachingManager>(Lifestyle.Transient);
container.Register<IDataAccessLayer, DataAccessLayer>(Lifestyle.Transient);
}
}
}
MVCコントローラのDIも同じ場所に登録できますか?コンテナを再利用できますか?
更新:私は閉じる必要がありますが、Web APIコントローラでパラメータのないコンストラクタが必要なエラーが発生しました。私はそれを追加しようとしたが、その後何ももちろん注入しないます
public static class SimpleInjectorWebApiInitializer
{
/// <summary>Initialize the container and register it as Web API Dependency Resolver.</summary>
public static void Initialize()
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
InitializeContainer(container);
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.Verify();
//GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
}
private static void InitializeContainer(Container container)
{
container.Register<ICachingManager, CachingManager>(Lifestyle.Transient);
container.Register<IDataAccessLayer, DataAccessLayer>(Lifestyle.Transient);
}
}
おかげで、ほとんどそれは、あなたが私の更新を参照してくださいすることができ、私が働いていますか? – FailedUnitTest
@FailedUnitTest両方の依存関係リゾルバが必要です。したがって、Web API依存リゾルバも同様です。 – Steven
それはそれを固定しました、スティーブンありがとう! – FailedUnitTest