对于一个项目,我一直在研究JavaFX 2.0桌面应用程序(keytool UI).JavaFx2.0的工作方式(无论如何在我的项目中),UI事件处理发生在JavaFX 2.0 UI类本身中(例如:onclicked()事件或属性更改侦听器).
现在我使用一个带有方法的静态类:getController(),所有UI类都使用它来访问应用程序的一个控制器(不知何故,将控制器传递给所有50多个UI类似乎很麻烦).
然而问题是,一个控制器变得非常大!它有太多的方法(我的UI类需要访问所有业务逻辑方法).即使它只将方法调用传递给我的模型/服务,仍然需要在控制器级别捕获许多异常,以便在UI中处理它们(显示错误消息等).
任何人都知道一种简洁的方法可以使整个MVC/MVP模式更好地适用于我的应用程序,而UI/Controller/Model类不直接依赖于彼此吗?每个用例可能有不同的控制器?但是,我将如何制作它以便正确的UI类获得正确的控制器而不直接知道它?也许使用界面?
我有一个WCF服务,让我们说在IIS中托管的程序集A. WCF服务引用另一个程序集,比如程序集B,它需要访问程序集A的Assembly对象.
原因:我想通过额外的合同和该合同的默认实现来扩展现有的WCF服务,这可以返回WCF服务程序集的FILE VERSION.
请参阅下面的代码:
程序集A(WCF服务):
web.config:除地址"B"下的现有2个端点外,还添加了新端点
<configuration>
<system.serviceModel>
<services>
<service name="ExistingServiceHandler">
<endpoint address="mex" kind="mexEndpoint"/>
<endpoint address="" binding="basicHttpBinding" contract="IExistingContract"/>
<endpoint address="B" binding="basicHttpBinding" contract="AssemblyB.IServiceContract"/>
</service>
...
Run Code Online (Sandbox Code Playgroud)
现有实现:现在扩展程序集B中的"实现".
public class ExistingServiceHandler : Implementation, IExistingContract
{
// Whatever methods are implemented here
}
Run Code Online (Sandbox Code Playgroud)
程序集B(C#类库):
[ServiceContract]
public interface IServiceContract
{
[OperationContract]
string ServiceVersion();
}
public class Implementation : IServiceContract
{
public string ServiceVersion()
{
string assemblyLocation = Assembly.GetEntryAssembly().Location;
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assemblyLocation);
string fileVersion = fvi.FileVersion;
return fileVersion;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下(在程序集B中),但没有一个返回正确的程序集:
Assembly.GetEntryAssembly(); // returns …Run Code Online (Sandbox Code Playgroud)