そこで、「ASP.NET MVC2InAction 」という本のデモをおならします。ただ遊んでいるだけの本当の理由ではありません。私は実際のIOCコンテナを使用して例を実装しようとしました(サンプルコードで使用されているものは偽物であり、もちろん機能します)。私が抱えている問題は、MakeGenericTypeが名前にバックティック1が付いた奇妙な型を返すことです。この質問を見ました。VisualStudioデバッガーでの型名のバックティックとはどういう意味ですか?それはそれが表示目的のためだけであることを示唆しているように思われますか?しかし、それはそのようには見えません。
これが私のコードです:
//here are the ways I tried to register the types
private static void InitContainer()
{
if (_container == null)
{
_container = new UnityContainer();
}
_container.RegisterType<IMessageService, MessageService>();
_container.RegisterType<IRepository, Repository>();
_container.RegisterType(typeof(IRepository<Entity>), typeof(Repository<Entity>));
}
これが私が実装しようとしているモデルバインダーからのコードです:
public class EntityModelBinder: IFilteredModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null)
return null;
if (string.IsNullOrEmpty(value.AttemptedValue))
return null;
int entityId;
if (!int.TryParse(value.AttemptedValue, out entityId))
return null;
Type repoType = typeof (IRepository<>).MakeGenericType(bindingContext.ModelType);
var repo = (IRepository)MvcApplication.Container.Resolve(repoType, repoType.FullName, new ResolverOverride[0]);
Entity entity = repo.GetById(entityId);
return entity;
}
public bool IsMatch(Type modelType)
{
return typeof (Entity).IsAssignableFrom(modelType);
}
}
の呼び出しは、container.resolve
常に次のエラーで爆発します。
依存関係の解決に失敗しました。type="MvcModelBinderDemo.IRepository`1[MvcModelBinderDemo.Entity]"、name = "MvcModelBinderDemo.IRepository`1 [[MvcModelBinderDemo.Entity、MvcModelBinderDemo、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null ]]"。例外が発生しました:解決中。
また、refをに入れるのMvcApplication
はModelBinder
少しずさんで、物事がどのように機能し、コンテナに到達する必要があるかを理解しようとしていることを私は知っています。
ご入力いただきありがとうございます。