我有一张表格:
public partial class mdiAuthenticationForm : Form
{
public Services.Authentication.IAuthentication Authenticator { get; set;
public Services.Authentication.IAuthorization Authorizor { get; set; }
我想为上面的两个属性注入具体的类。
我为每个人都有一个类型,我正在使用app.config来获取配置信息。但是,我不想为每个页面创建一个接口,只是为了注入,所以,我如何注入每个页面?
基本上,我在下面的type元素中放入了type属性,或者,我该怎么做?
<type type="" mapTo="mdiAuthenticationForm,project">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<property name="Authenticator" propertyType="Services.Authentication.IAuthentication,project">
<dependency name="mssqlauth" />
</property>
<property name="Authorizor" propertyType="Services.Authentication.IAuthorization,project">
<dependency name="mssqlautz" />
</property>
</typeConfig>
</type>
我正在使用Unity Framework,顺便说一句。
谢谢。
编辑:我得到了容器,然后我尝试使用这个注入:
Container.Configure<InjectedMembers>().ConfigureInjectionFor<mdiAuthenticationForm>();
答案 0 :(得分:0)
我让它工作,不漂亮,但它的工作原理。最后一个问题是我必须在我的界面中包含Form.ShowDialog。
首先是我的代码的主要部分,从Program.cs创建并调用表单,然后第二个是我的界面。我希望这是模态的,这就是我使用ShowDialog的原因。我还将这两个属性移动到一个新的控制器中,但我仍然有一个属性可以设置,以确保它正常工作。
container.Configure<InjectedMembers>().ConfigureInjectionFor<IAuthenticationForm>();
containers.Configure(container);
IAuthenticationForm f = container.Resolve<IAuthenticationForm>();
f.ShowDialog();
public interface IAuthenticationForm
{
Optimal4.Services.Authentication.IAuthorization Authorizor { get; set; }
void checkAuthentication();
System.Windows.Forms.DialogResult ShowDialog();
}
答案 1 :(得分:0)
基本上你想使用属性注入来注入mdiAuthenticationForm的依赖项。你不能做类似下面的事吗?
在配置文件中添加类型映射:
<container>
<types>
<type type="IAuthentication,PutAssemblyNameHere" mapTo="Authentication,PutAssemblyNameHere"/>
<type type="IAuthorization,PutAssemblyNameHere" mapTo="Authorization,PutAssemblyNameHere"/>
<type type="mdiAuthenticationForm,PutAssemblyNameHere"/>
</types>
</container>
将依赖关系属性放在身份验证和授权属性上。
[Dependency]
public Services.Authentication.IAuthentication Authenticator { get; set;}
[Dependency]
public Services.Authentication.IAuthorization Authorizor { get; set; }
然后在您的代码中,执行以下操作以获取mdiAuthenticationForm的实例:
mdiAuthenticationForm form = container.Resolve<mdiAuthenticationForm>();
如果您不想在配置文件中添加mdiAuthentication,还可以执行以下操作:
mdiAuthenticationForm form = new mdiAuthenticationForm();
container.BuildUp<mdiAuthenticationForm>(form);
这应解决现有实例的依赖关系并将其连接起来。