Фильтр действий, в который я хочу внедрить, начинается так:
public class UserAuthorisation : AuthorizeAttribute
{
public IWcfClientProxy<IAppFrameworkServiceChannel>
FrameworkServiceProxy { get; set; }
Я настроил свой контейнер следующим образом:
container.Register<IWcfClientProxy<IAppFrameworkServiceChannel>>(
()=> new WcfClientProxy<IAppFrameworkServiceChannel>());
container.RegisterInitializer<UserAuthorisation>(handler =>
{
handler.FrameworkServiceProxy = container
.GetInstance<IWcfClientProxy<IAppFrameworkServiceChannel>>();
});
Когда я запускаю это, свойство FrameworkServiceProxy
имеет значение null.
Я прочитал это сообщение: Simple Injector: внедрение свойства в базовый класс и последовал ответу. Я также прочитал пример на этой странице Документация по простому инжектору.
Я не ввожу в базовый класс, и, может быть, проблема в этом?
## ОБНОВИТЬ ##
Я добавляю больше информации, так как думаю, что это должно работать на основе того, что было сказано в ответе Стивенса.
Я использую пакет NuGet для MVC 3. Это добавляет в приложение следующее:
public static class SimpleInjectorInitializer
{
/// <summary>Initialize the container and register it as MVC3 Dependency Resolver.</summary>
public static void Initialize()
{
var container = new Container();
InitializeContainer(container);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.RegisterMvcAttributeFilterProvider();
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
}
private static void InitializeContainer(Container container)
{
container.Register<IWcfClientProxy<IAppFrameworkServiceChannel>>(() => new WcfClientProxy<IAppFrameworkServiceChannel>());
container.RegisterInitializer<UserAuthorisation>(handler =>
{
handler.FrameworkServiceProxy = container.GetInstance<IWcfClientProxy<IAppFrameworkServiceChannel>>();
});
}
Это включает в себя container.RegisterMvcAttributeFilterProvider();
, который, как я теперь понимаю, должен регистрировать поставщика фильтров и должен означать, что фильтры создаются через контейнер (это понимание может быть неправильным), а затем автоматически подключаются свойства.
Мой фильтр зарегистрирован в Global.asax.cs следующим образом:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new UserAuthorisation());
}
Мне кажется, что фильтр не создается контейнером, поэтому я думаю, что мне нужно сделать что-то еще, чтобы это произошло?
UserAuthorisation
? Вы добавляете его в GlobalFilters или в Simple Injector есть поставщик фильтров? - person nemesv   schedule 23.08.2012UserAuthorisation
не разрешается с помощью Simple Injector, то Simple Injector не будет знать о вашем фильтре, поэтому не сможет выполнить инъекцию свойств... - person nemesv   schedule 23.08.2012