小编Ale*_*ick的帖子

使用非接口的构造函数参数的依赖注入

我仍然是DI的新手,我试图理解我是否以错误的方式思考问题.当我想表示一个依赖于IRandomProvider的Die对象时,我正在解决玩具问题.那个界面很简单:

public interface IRandomProvider 
{
   int GetRandom(int lower, int upper);
}
Run Code Online (Sandbox Code Playgroud)

我想要一个看起来像这样的Die构造函数:

Die(int numSides, IRandomProvider provider)
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用具有如下方法的静态DIFactory:

    public static T Resolve<T>()
    {
        if (kernel == null)
        {
            CreateKernel();
        }
        return kernel.Get<T>();
    }
Run Code Online (Sandbox Code Playgroud)

CreateKernel只是绑定到IRandomProvider的特定实现.

我希望能够用以下方式调用:

DIFactory.Resolve<Die>(20);
Run Code Online (Sandbox Code Playgroud)

如果没有制作特殊版本的"Resolve",我就无法完成这项工作,这可以让我处理ConstructorArgs.这似乎使事情变得过于复杂,并且需要我为其中的每个其他实例修改DIFactory,以及绑定到构造函数参数的特定名称.

如果我重构Die类不使用int构造函数,一切正常.但现在有人必须记住初始化numSides参数,这似乎是一个坏主意,因为它是类的要求.

我怀疑这对DI来说是一个糟糕的心理模型.任何人都可以开导我吗?

c# dependency-injection ninject

9
推荐指数
2
解决办法
1万
查看次数

MVC视图中的分支逻辑

我发现自己在我的视图中编写了很多代码,看起来像下面的代码.在这种情况下,我想为新手添加一些解释性HTML,为专家用户添加不同的HTML.

<% if (ViewData["novice"] != null ) { %>
some extra  HTML for a novice
<% } else { %>
some HTML for an expert
<% } %>
Run Code Online (Sandbox Code Playgroud)

这是表示逻辑,因此它在视图与控制器之间是有意义的.然而,它变得非常难看,特别是当ReSharper想要移动所有支撑以使其更加丑陋时(有没有办法将其关闭以用于视图?).

我的问题是这是否合适,还是应该将控制器分支到两个单独的视图?如果我做两个视图,我将有很多重复的HTML来维护.

或者我应该使用共同的部分视图来共享两个单独的视图?

asp.net-mvc views

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

从Android使用WCF REST服务非常慢

我有一个用C#构建的WCF REST服务,它返回一个图像作为CPU密集型操作的一部分.客户端在Android(Java)上运行默认情况下,它将返回一个文本JSON对象,如下所示:

{ "d",[9,0,77,12,11,...]}

那些是图像的字节.精细.但是,用于解码此JSON的所有解决方案都无法忍受.我尝试过Gson,Jackson和内置的Android JSONObject类.我不知道他们为什么这么慢.

作为替代解决方案,我让我的REST服务返回一个GUID,然后Android客户端可以使用该GUID转到常规URL,该URL通过MVC控制器将图像作为常规二进制流提供.

这很好用,而且速度很快,而且在Android方面很容易处理.但是,它确实感觉有点像kludge,并且违反了REST设计原则.

我在这里错过了什么吗?有一个更好的方法吗?

rest binary asp.net-mvc android

3
推荐指数
1
解决办法
2270
查看次数

标签 统计

asp.net-mvc ×2

android ×1

binary ×1

c# ×1

dependency-injection ×1

ninject ×1

rest ×1

views ×1