我正在使用Unity.MVC4依赖项注入来访问我的服务。注入Controller构造函数时,一切都应该正常进行,但是我现在想做的是在过滤器类中使用属性注入,以便可以从内部访问数据库。
在开始这个问题之前,我在Google周围搜索并尝试了不同的示例,但是找不到适合我的解决方案。
Bootstrapper.cs
public static class Bootstrapper
{
public static IUnityContainer Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
return container;
}
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<IAccountRepository, AccountRepository>();
container.RegisterType<IAdministrationRepository, AdministrationRepository>();
container.RegisterType<IUploadDirectlyRepository, UploadDirectlyRepository>();
container.RegisterType<IUserRepository, UserRepository>();
container.RegisterType<INewsRepository, NewsRepository>();
container.RegisterType<IContactRepository, ContactRepository>();
// register all your components with the container here
// it is NOT necessary to register your controllers
// e.g. container.RegisterType<ITestService, TestService>();
RegisterTypes(container);
return container;
}
public static void RegisterTypes(IUnityContainer container)
{
}
}
我将向您显示的以下代码用于我想在操作中使用的filter属性。我想传递一个字符串数组类型的参数,以便可以验证是否允许当前用户访问该操作。
在我的应用程序中,有两种类型的用户,帐户所有者和来宾。所有操作对帐户所有者都是完全开放的,但对于来宾,操作因操作而异。例如,一个操作可能要求您至少具有三个权限之一(读取,写入和编辑)。
这不起作用,因为过滤器需要两个参数(IRepository和string [])。显然,这里也不能使用构造函数注入。
然后,我尝试实现可在此处找到的John Allers解决方案。看起来很有希望,但是却给了我这个错误:
Microsoft.Practices.Unity.dll中发生类型为“ Microsoft.Practices.Unity.ResolutionFailedException”的异常,但未在用户代码中处理
附加信息:依赖关系的解析失败,类型=“ Fildela.ClaimsAuthorizeAccountAccess”,名称=“(none)”。
发生以下异常:正在解决。
异常是:InvalidOperationException-类型为Fildela.ClaimsAuthorizeAccountAccess的属性_accountRepository无法设置。
在发生异常时,容器为:
解决Fildela.ClaimsAuthorizeAccountAccess,(无)
关于如何解决这个坏男孩有什么建议吗?
谢谢!
芜湖不芜