我正在为.NET 3.5应用程序(WinForms)设计一个简单的插件框架.
我们当前的应用程序需要开始支持动态加载和"挂钩"应用程序在编译时未知的不同"插件"/"扩展".
这些扩展将"挂钩"到应用程序的不同区域,例如作为某些类的事件处理程序.
例如(简化):
public class SomeSystem
{
public event Action<string> Completed;
public event Action<string> Failed;
public event Action<string> Stopped;
}
Run Code Online (Sandbox Code Playgroud)
我想要的一个用例是开发人员能够在插件程序集中为这些事件定义处理程序,而无需让应用程序了解它们.
据我所知,IoC容器允许在运行时动态发现对象并将它们注册到容器中.
IoC容器是否也可以为我挂钩进入各种事件?或者没有这样的框架,这项任务更容易吗?
如何设计如何为这样的任务集成IoC容器?(假设有多个扩展点,例如可用于注册的不同事件).
我发现自己要问的一些问题:
.net c# dependency-injection ioc-container inversion-of-control
我希望在Unity中集成admob interstitial,我为横幅做了但却无法找到插页式广告的最终解决方案,任何帮助都将不胜感激.
我绑定了以下链接,但它不适用于非页内广告 https://github.com/googleads/googleads-mobile-plugins
请不要建议任何付费插件作为Prime31等.
我正在构建一个适用于 Android 的 SDK,应将其导出为 .aar 文件。
SDK 在其 build.gradle 文件中定义了依赖项列表,例如:
compile 'com.makeramen:roundedimageview:2.2.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.google.android.gms:play-services-ads:9.0.2'
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何将这些库包含在 .aar 中,以便它是独立的,并且不需要使用它的开发人员在使用我的 SDK 时添加这些库?
我到处都在寻找这个问题,但大多数答案似乎都没有解决这个问题或者不起作用。
我们正在使用第三方库进行广告中介,该库在其清单中声明了不同的活动,接收者和服务。并非所有这些实际上都将在应用程序中实现。
我开始从我们应用程序的用户那里看到诸如此类的异常:
java.lang.RuntimeException:无法实例化接收器com.inmobi.commons.core.utilities.uid.ImIdShareBroadCastReceiver:java.lang.ClassNotFoundException:找不到类“ com.inmobi.commons.core.utilities.uid.ImIdShareBroadCastReceiver”在路径上:DexPathList
我的问题是-如果不存在接收器(或AndroidManifest中定义的其他组件),Android会尝试实例化它们吗?
我没有找到描述此特定情况的任何文档。
crash android broadcastreceiver android-manifest android-broadcastreceiver
我正在运行TeamCity来构建一个.NET项目(更确切地说是几个项目).
我应该使用Rebuild目标还是构建目标?
我想最小化构建时间,而不是生成任何没有更改的项目的更新版本.
这种安全做法是否使用"Build"目标?如果以前的项目输出被删除怎么办?我如何验证我可以安全地这样做?
在我目前的项目中,我正在与一些第三方中间件交互,这些中间件抛出了许多不同类型的异常(大约10个异常或更多).
我使用第三方的库有几种方法,每种方法都与第三方交互,但需要保护它们不受同一组10个或更多例外的影响.
我目前拥有的是我图书馆的每个方法都是这样的:
try
{
// some code
}
catch (Exception1 e)
{
}
catch (Exception2 e2)
{
}
...
catch (ExceptionN eN)
{
}
Run Code Online (Sandbox Code Playgroud)
异常的数量也可能增加.
如何减少代码重复并在一个地方统一处理所有异常?
我们正在构建一个应用程序(WinForms,.NET 3.5),它将"插件"DLL加载到辅助AppDomain中.辅助AppDomain需要偶尔与第一个AppDomain通信(更具体地说,从主AppDomain中创建的对象调用或获取数据).
我已经阅读了有关AppDomains的大部分内容以及它们之间的通信.
到目前为止,我见过的唯一简单的解决方案是继承MarshalByRefObject并将TransparentProxy传递到第二个AppDomain,在Proxy上调用方法.
此方法有其缺点(例如,在框架类型的情况下,或者从已经从其他类继承的类型,静态字段/类等等,并不总是可以从MBRO继承).
由于当前的通信点非常不变(只有2-3个需要通信的场景),我考虑创建一个具有以下属性的简单Mediator类:
将调用此代理对象上的方法,然后调用第一个AppDomain中"真实"对象上的方法.
我的问题 -
我们的.NET应用程序使用2个AppDomains.辅助域需要访问在主应用程序域中创建的Logger对象.
此记录器通过具有命名管道绑定的WCF服务公开.
这就是我为这项服务创建"客户"的方式:
private void InitLogger()
{
if (loggerProxy != null)
{
Logger.Instance.onLogEvent -= loggerProxy.Log;
}
// Connect to the logger proxy.
var ep = new EndpointAddress("net.pipe://localhost/app/log");
var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
//Logger.Debug("Creating proxy to Logger object.");
var channelFactory = new ChannelFactory<ILogProvider>(binding, ep);
loggerProxy = channelFactory.CreateChannel();
channelFactory.Faulted += (sender, args) => InitLogger();
channelFactory.Closed += (sender, args) => InitLogger();
Logger.Instance.onLogEvent += loggerProxy.Log;
}
Run Code Online (Sandbox Code Playgroud)
最近我们得到随机的CommunicationObjectFaultedException - 我想这是因为频道超时或由于某些其他原因导致我失踪.
这就是我添加了Closed和Faulted事件的处理的原因,这些事件似乎无法正常工作(也许我没有正确使用它们).
编辑:这些事件在建议的Factory对象上,因此这解释了为什么它们没有被引发.
我的问题是 - 我怎样才能避免这些错误?
我们的方案是我们需要在整个应用程序的生命周期内始终保持此通道的开放,并且始终需要访问此Logger服务,并且在任何情况下都不应超时.
处理这种情况有安全做法吗?
我有以下课程:
public class NewListBox : ListBox
{
public NewListBox()
{
}
private ImageList _myImageList;
public ImageList ImageList
{
get { return _myImageList; }
set { _myImageList = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是处置这个对象是否会触发对象上的字段的处理,比如ImageList,或者我应该实现(覆盖)Dispose方法并自己完成这项工作?
我们的团队最近开始使用 Git。
我们正在做的主要工作流程很简单,(因为我们还没有对更复杂的命令和工作流程进行忍者训练):
一段时间后,存储库日志如下所示:

我想避免这种情况,因为它使日志几乎不可读,更不用说在某些情况下正在进行的“合并”不会更改任何文件(我看不到它所做的任何更改)。
我们在使用 Git 的方式上做错了吗?我们应该以不同的方式做吗?