Я решил попытаться вызвать в виде контейнера сборку для взаимодействия с FubuMVC. Ну, крутая часть - это то, что она проходит весь тест, который делает сборка FubuMVC.Container.StructureMap. Однако, когда я сбросил в FubuSample. Я получил ошибку активации.Как сделать поставщика Ninject, когда конструктор типа не известен?
Ошибка в том, что в провайдере для поведения я всего лишь , вызывающий конструктор без параметров для создания экземпляров поведения. То, что неприемлемо в реальной жизни, казалось бы.
Вот как это настраивается:
public class TestBehavior2 : IControllerActionBehavior
{
public IControllerActionBehavior InsideBehavior { get; set; }
public IInvocationResult Result { get; set; }
protected FubuConfiguration Configuration { get; set; }
protected FubuConventions Conventions { get; set; }
public TestBehavior2(FubuConventions conventions, FubuConfiguration config)
{
Conventions = conventions;
Configuration = config;
}
public OUTPUT Invoke<INPUT, OUTPUT>(INPUT input, Func<INPUT, OUTPUT> func)
where INPUT : class
where OUTPUT : class
{
// Invocation stuff
}
}
public class TestBehavior : IControllerActionBehavior
{
public IControllerActionBehavior InsideBehavior { get; set; }
public IInvocationResult Result { get; set; }
public OUTPUT Invoke<INPUT, OUTPUT>(INPUT input, Func<INPUT, OUTPUT> func)
where INPUT : class
where OUTPUT : class
{
// Invocation stuff
}
}
Мой метод Load имеет эти привязки в нем:
foreach (var actionConfig in _configuration.GetControllerActionConfigs())
{
Bind(actionConfig.ControllerType).ToSelf();
Bind<IControllerActionBehavior>()
.ToProvider(new BehaviorInstanceProvider(actionConfig))
.WhenParentNamed(actionConfig.UniqueID);
Bind<IControllerActionInvoker>().To(actionConfig.InvokerType)
.Named(actionConfig.UniqueID);
}
Создать метод моего провайдера является:
public object Create(IContext context)
{
var behavior = ConfigureInstance(context);
foreach (var type in _config.GetBehaviors().Reverse())
{
IControllerActionBehavior previousBehavior = behavior;
behavior = (IControllerActionBehavior)Activator.CreateInstance(type);
t.GetProperty(INSIDE_PROP_NAME).SetValue(behavior, temp, null);
}
return behavior;
}
Так мой вопрос заключается в том, как мне настроить провайдера для создания экземпляра , когда все, что у меня нет, знаете, как будет выглядеть конструктор ? Вернее, если я использую ConstructorInfo для определения конструктора , Ninject будет вводить соответствующие зависимости?
Это использование Ninject 2b, так как FubuMvc требует поддержки CommonServiceLocator .
Не могли бы вы предоставить пример кода? Я не уверен, как именно вы используете провайдера? –
Обратите внимание, что Ninject разрешит любые аргументы в конструкторе вашего провайдера, если это возможно. –