2011-12-24 3 views
0

Я использую ASP.NET MVC 3 и имею свое собственное связующее устройство.Пользовательское связующее устройство с зависимостями с замком Windsor

public class NewsModelBinder : DefaultModelBinder 
{ 
    private readonly INewsRepository newsRepository; 
    private readonly ICategoryRepository categoryRepository; 

    public NewsModelBinder() 
    { 

    } 

    public NewsModelBinder(INewsRepository newsRepository, ICategoryRepository categoryRepository) 
    { 
     this.newsRepository = newsRepository; 
     this.categoryRepository = categoryRepository; 
    } 

    protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) 
    { 
     //Some code here 
    } 
} 

И я хочу разрешить зависимости с Castle Windsor. Но каким образом я могу это сделать, если я хочу, чтобы оба регистрировали мое связующее, и я хочу, чтобы Windsor дал ему необходимые параметры? Потому что, когда я регистрирую связующее, я не могу просто дать ему необходимые параметры.

UPD 0 Или, может быть, я могу получить подходящие объекты из контейнера в коде? Потому что я регистрирую эти репозитории как однотонные.

ответ

0

Я решил проблему следующим образом: установить свои зависимости как свойства и использовали инъекцию имущества

public class NewsModelBinder : DefaultModelBinder 
{ 
    public INewsRepository NewsRepository { get; set; } 
    public ICategoryRepository CategoryRepository { get; set; } 

    public NewsModelBinder() 
    {} 

    protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) 
    { 
     //Some code here 
    } 
} 

, а затем в Global.asax я добавил свой связующий как этот

ModelBinders.Binders.Add(typeof(News), Container.Resolve<NewsModelBinder>()); 

Виндзор самостоятельно разрешает зависимости таким образом