相关疑难解决方法(0)

Unity使用参数将依赖项注入MVC​​过滤器类

我正在使用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)
    { …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc dependency-injection unity-container action-filter asp.net-mvc-4

9
推荐指数
3
解决办法
8374
查看次数

如何使用构造函数参数测试Action Filter的存在?

我试图测试我的基本控制器是否装饰了某个动作过滤器.因为这个过滤器的构造函数看起来web.config,我第一次尝试测试失败,因为测试项目没有有效的配置文件.继续,我使用了一个TestConfigProvider我注入到过滤器构造函数中,但是下面的测试失败了,因为配置提供程序没有传递给构造函数.如果应用此过滤器,我还能怎么测试?

[TestMethod]
public void Base_controller_must_have_MaxLengthFilter_attribute()
{
    var att = typeof(BaseController).GetCustomAttribute<MaxLengthFilter>();
    Assert.IsNotNull(att);
}
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc

6
推荐指数
1
解决办法
4930
查看次数

HtmlHelper 扩展方法中的依赖注入?

我想将属性渲染器实现为处理程序。我在应用程序中使用 Autofac 作为 DI 容器。如何在不使用全局可访问容器(服务位置)的情况下获取在 HtmlHelper 扩展中实现 IPropertyHandler 的对象?是否可以在 Autofac 中注册自己的 HtmlHelper?也许MVC框架提供了另一种方式?

public static class HtmlHelperExtensions {
    public static MvcHtmlString Editor(this HtmlHelper html, object model) {
        return new Renderer(new List<IPropertyHandler>() /*Where to get these objects?*/ ).Render(html, model);
    }
}

public class Renderer {
    private readonly ICollection<IPropertyHandler> _propertyRenderers;

    public Renderer(ICollection<IPropertyHandler> propertyRenderers) {
        _propertyRenderers = propertyRenderers;
    }

    public MvcHtmlString Render(HtmlHelper html, object model) {
        var result = "";
        foreach(var prop in model.GetType().GetProperties()) {
            var renderers = _propertyRenderers.OrderBy(b => b.Order);
            //impl
        }
        return …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc dependency-injection autofac asp.net-mvc-5

5
推荐指数
1
解决办法
2898
查看次数