私は新しいAsp net mvc 3 RC2で遊んでいました。次のように私は、WindsorViewPageActivatorの作成
public class WindsorViewPageActivator : IViewPageActivator
{
object IViewPageActivator.Create(ControllerContext controllerContext, Type type)
{
return DependencyResolver.Current.GetService(type);
}
}
とWindsorDependencyResolverクラス
public class WindsorDependencyResolver : IDependencyResolver
{
private readonly IWindsorContainer container;
public WindsorDependencyResolver(IWindsorContainer container)
{
this.container = container;
}
#region IDependencyResolver Members
public object GetService(Type serviceType)
{
return Resolve(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return container.ResolveAll(serviceType).Cast<object>();
}
public IEnumerable<TService> GetAllInstances<TService>()
{
return container.ResolveAll<TService>();
}
public TService GetInstance<TService>()
{
return (TService)Resolve(typeof(TService));
}
#endregion
private object Resolve(Type serviceType)
{
try
{
return container.Resolve(serviceType);
}
catch (Exception ex)
{
return null;
}
}
}
}
今、私はGlobal.asaxの中で、この
container.Register(Component.For<IControllerActivator>().ImplementedBy<WindsorControllerActivator>());
container.Register(Component.For<IViewPageActivator>().ImplementedBy<WindsorViewPageActivator>());
container.Register(Component.For<IControllerFactory>().ImplementedBy<DefaultControllerFactory>());
DependencyResolver.SetResolver (new WindsorDependencyResolver(container));
ような何かをやっているWindsorViewPageActivatorクラスを作成しました' 次のエラーが発生しました '〜/ Views/Account/LogOn.cshtml'にあるビューが作成されませんでした。 ウィンザーコンテナに各ビューページを登録する必要がある場合は、どのように各ビューを登録できますか?私はRazorビューエンジンを使用しています。 ありがとう
大丈夫、コントローラのために私はthis.container.Register(AllTypes.Of().FromAssembly(Assembly.GetExecutingAssembly())のような何かをしました。(c => c.LifeStyle.Transient.Named(c.Implementation .Name.ToLower(CultureInfo.CurrentCulture))))); –
Tinku
なぜウィンザー2.5を使用していないのですか? –
はい、Windsor 2.5をダウンロードしました。コントローラ用に、container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly())を使用しました。BasedOn().Configure(c => c.LifeStyle.Transient.Named(c.Implementation.Name .ToLower(CultureInfo.CurrentCulture))))); –
Tinku