Используя Unity Framework, добавьте страницу System.Windows.Forms.Form. - PullRequest
1 голос
/ 20 мая 2009

У меня есть форма:

public partial class mdiAuthenticationForm : Form
    {
        public Services.Authentication.IAuthentication Authenticator { get; set; 
        public Services.Authentication.IAuthorization Authorizor { get; set; }

и я хочу добавить конкретные классы для двух указанных выше атрибутов.

У меня есть тип для каждого из них, и я использую app.config для информации о конфигурации. Но я не хочу создавать интерфейс для каждой страницы, просто для внедрения, так как я могу внедрить в каждую страницу?

В принципе, что мне указать в атрибуте типа в следующем элементе типа или как я могу это сделать?

  <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>();

Ответы [ 2 ]

0 голосов
/ 21 мая 2009

Как правило, вы хотите использовать внедрение свойства для внедрения зависимостей 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);

Это должно разрешить зависимости от существующего экземпляра и подключить их.

0 голосов
/ 21 мая 2009

Я получил это на работу, не красиво, но это работает. Последняя проблема заключалась в том, что мне пришлось включить 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...